From 6ab691048d0b87263a746e82fed55629243fcf4b Mon Sep 17 00:00:00 2001 From: aiju Date: Fri, 3 Jun 2011 12:28:37 +0000 Subject: added (unfinished) nanosleep to APE --- sys/include/ape/time.h | 6 ++++++ sys/src/ape/lib/ap/posix/mkfile | 1 + sys/src/ape/lib/ap/posix/nanosleep.c | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 sys/src/ape/lib/ap/posix/nanosleep.c 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\ +#include +#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; +} -- cgit v1.2.3