diff options
Diffstat (limited to 'cpukit/posix/src/usleep.c')
-rw-r--r-- | cpukit/posix/src/usleep.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/cpukit/posix/src/usleep.c b/cpukit/posix/src/usleep.c new file mode 100644 index 0000000000..6753cfe713 --- /dev/null +++ b/cpukit/posix/src/usleep.c @@ -0,0 +1,34 @@ +/* + * XXX 3.4.3 Delay Process Execution, P1003.1b-1993, p. 81 + * + * $Id$ + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <time.h> +#include <unistd.h> + +#include <rtems/system.h> +#include <rtems/score/tod.h> + + +unsigned usleep( + unsigned int useconds +) +{ + struct timespec tp; + struct timespec tm; + unsigned remaining; + + tp.tv_sec = useconds / TOD_MICROSECONDS_PER_SECOND; + tp.tv_nsec = (useconds % TOD_MICROSECONDS_PER_SECOND) * 1000; + + nanosleep( &tp, &tm ); + + remaining = tm.tv_sec * TOD_MICROSECONDS_PER_SECOND; + remaining += tm.tv_nsec / 1000; + return remaining; /* seconds remaining */ +} |