shithub: riscv

Download patch

ref: 5e37087451d857f3d329341319511d00f0c49c38
parent: 3ba1197aeb382e1750cbb0f2567794bd4482e1e2
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Apr 9 22:52:31 EDT 2016

ape: add internal _NSEC() function and make gettimeofday() use it

--- /dev/null
+++ b/sys/src/ape/lib/ap/plan9/9nsec.c
@@ -1,0 +1,43 @@
+#include "sys9.h"
+
+typedef unsigned long long uvlong;
+typedef long long vlong;
+typedef unsigned char uchar;
+
+static uvlong order = 0x0001020304050607ULL;
+
+static void
+be2vlong(vlong *to, uchar *f)
+{
+	uchar *t, *o;
+	int i;
+
+	t = (uchar*)to;
+	o = (uchar*)&order;
+	for(i = 0; i < 8; i++)
+		t[o[i]] = f[i];
+}
+
+long long
+_NSEC(void)
+{
+	uchar b[8];
+	vlong t;
+	int opened;
+	static int fd = -1;
+
+	opened = 0;
+	for(;;) {
+		if(fd < 0)
+			if(opened++ ||
+			    (fd = _OPEN("/dev/bintime", OREAD|OCEXEC)) < 0)
+				return 0;
+		if(_PREAD(fd, b, sizeof b, 0) == sizeof b)
+			break;		/* leave fd open for future use */
+		/* short read, perhaps try again */
+		_CLOSE(fd);
+		fd = -1;
+	}
+	be2vlong(&t, b);
+	return t;
+}
--- a/sys/src/ape/lib/ap/plan9/mkfile
+++ b/sys/src/ape/lib/ap/plan9/mkfile
@@ -11,6 +11,7 @@
 	_getpw.$O\
 	_nap.$O\
 	9mallocz.$O\
+	9nsec.$O\
 	9iounit.$O\
 	9read.$O\
 	9readn.$O\
--- a/sys/src/ape/lib/bsd/gettimeofday.c
+++ b/sys/src/ape/lib/bsd/gettimeofday.c
@@ -1,49 +1,16 @@
 #include <sys/types.h>
 #include <time.h>
 #include <sys/time.h>
-#include <string.h>
-#include "sys9.h"
 
-typedef unsigned long long uvlong;
-typedef long long vlong;
-typedef unsigned char uchar;
+/* ap/plan9/9nsec.c */
+extern long long _NSEC(void);
 
-static uvlong order = 0x0001020304050607ULL;
-
-static void
-be2vlong(vlong *to, uchar *f)
-{
-	uchar *t, *o;
-	int i;
-
-	t = (uchar*)to;
-	o = (uchar*)&order;
-	for(i = 0; i < 8; i++)
-		t[o[i]] = f[i];
-}
-
 int
 gettimeofday(struct timeval *tp, struct timezone *tzp)
 {
-	uchar b[8];
-	vlong t;
-	int opened;
-	static int fd = -1;
+	long long t;
 
-	opened = 0;
-	for(;;) {
-		if(fd < 0)
-			if(opened++ ||
-			    (fd = _OPEN("/dev/bintime", OREAD|OCEXEC)) < 0)
-				return 0;
-		if(_PREAD(fd, b, sizeof b, 0) == sizeof b)
-			break;		/* leave fd open for future use */
-		/* short read, perhaps try again */
-		_CLOSE(fd);
-		fd = -1;
-	}
-	be2vlong(&t, b);
-
+	t = _NSEC();
 	tp->tv_sec = t/1000000000;
 	tp->tv_usec = (t/1000)%1000000;