summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-06-04 00:29:51 +0000
committercinap_lenrek <cinap_lenrek@centraldogma>2011-06-04 00:29:51 +0000
commit75edd13d7805b54bbf447022d391ce5141c55d01 (patch)
tree62727be70279fffef5e5f04a13f2e3c79b841ca2
parent0accb94ff0cb8ef52a3ffea24b20524e393cecf2 (diff)
parent97d3ff1bee2a737ce334ecf1ac962bb74de9df75 (diff)
downloadplan9front-75edd13d7805b54bbf447022d391ce5141c55d01.tar.xz
merge
-rw-r--r--sys/include/ape/errno.h1
-rw-r--r--sys/include/ape/time.h6
-rw-r--r--sys/src/ape/lib/ap/posix/mkfile1
-rw-r--r--sys/src/ape/lib/ap/posix/nanosleep.c22
4 files changed, 30 insertions, 0 deletions
diff --git a/sys/include/ape/errno.h b/sys/include/ape/errno.h
index b268d96e0..6e821c28d 100644
--- a/sys/include/ape/errno.h
+++ b/sys/include/ape/errno.h
@@ -13,6 +13,7 @@ extern int errno;
#define E2BIG 1
#define EACCES 2
#define EAGAIN 3
+#define EWOULDBLOCK 3
#define EBADF 4
#define EBUSY 5
#define ECHILD 6
diff --git a/sys/include/ape/time.h b/sys/include/ape/time.h
index 7c672fcca..73dfc797d 100644
--- a/sys/include/ape/time.h
+++ b/sys/include/ape/time.h
@@ -52,6 +52,12 @@ extern char *ctime_r(const time_t *, char *);
#ifdef _POSIX_SOURCE
extern void tzset(void);
+
+struct timespec {
+ time_t tv_sec;
+ long tv_nsec;
+};
+extern int nanosleep(const struct timespec *req, struct timespec *rem);
#endif
#ifdef __cplusplus
diff --git a/sys/src/ape/lib/ap/posix/mkfile b/sys/src/ape/lib/ap/posix/mkfile
index 268a991d0..387208c5e 100644
--- a/sys/src/ape/lib/ap/posix/mkfile
+++ b/sys/src/ape/lib/ap/posix/mkfile
@@ -10,6 +10,7 @@ OFILES=\
sigset.$O\
sysconf.$O\
tzset.$O\
+ nanosleep.$O\
</sys/src/cmd/mksyslib
diff --git a/sys/src/ape/lib/ap/posix/nanosleep.c b/sys/src/ape/lib/ap/posix/nanosleep.c
new file mode 100644
index 000000000..a730a5834
--- /dev/null
+++ b/sys/src/ape/lib/ap/posix/nanosleep.c
@@ -0,0 +1,22 @@
+#define _PLAN9_SOURCE
+#include "../plan9/lib.h"
+#include <sys/types.h>
+#include <time.h>
+#include "../plan9/sys9.h"
+
+int
+nanosleep(struct timespec *req, struct timespec *rem)
+{
+ int ms;
+
+ ms = req->tv_sec * 1000 + (req->tv_nsec + 999999) / 1000000;
+ if(_SLEEP(ms) < 0) {
+ if(rem) {
+ rem->tv_sec = rem->tv_nsec = 0; /* needs better handling */
+ }
+ return -1;
+ }
+ if(rem)
+ rem->tv_sec = rem->tv_nsec = 0;
+ return 0;
+}