diff options
| -rw-r--r-- | sys/include/ape/errno.h | 1 | ||||
| -rw-r--r-- | sys/include/ape/time.h | 6 | ||||
| -rw-r--r-- | sys/src/ape/lib/ap/posix/mkfile | 1 | ||||
| -rw-r--r-- | sys/src/ape/lib/ap/posix/nanosleep.c | 22 |
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; +} |
