diff options
| -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 |
3 files changed, 29 insertions, 0 deletions
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; +} |
