summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/usleep.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/posix/src/usleep.c')
-rw-r--r--cpukit/posix/src/usleep.c34
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 */
+}