From b0e33756457f6d3b5daa250bd342d3f2275bc10b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 1 Sep 2008 10:39:24 +0000 Subject: Support sustems without nanosleep() --- src/assuan-io.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/assuan-io.c') diff --git a/src/assuan-io.c b/src/assuan-io.c index 17e8b46..647237d 100644 --- a/src/assuan-io.c +++ b/src/assuan-io.c @@ -21,6 +21,7 @@ #include #endif +#include #include #include #ifdef HAVE_SYS_SOCKET_H @@ -218,20 +219,27 @@ _assuan_simple_recvmsg (assuan_context_t ctx, struct msghdr *msg) void _assuan_usleep (unsigned int usec) { -#ifdef HAVE_W32_SYSTEM - /* FIXME. */ - Sleep (usec / 1000); + if (usec) + { +#ifdef HAVE_NANOSLEEP + struct timespec req; + struct timespec rem; + + req.tv_sec = 0; + req.tv_nsec = usec * 1000; + + while (nanosleep (&req, &rem) < 0 && errno == EINTR) + req = rem; + +#elif defined(HAVE_W32_SYSTEM) + Sleep (usec / 1000); #else - struct timespec req; - struct timespec rem; - - if (usec == 0) - return; + struct timeval tv; - req.tv_sec = 0; - req.tv_nsec = usec * 1000; - - while (nanosleep (&req, &rem) < 0 && errno == EINTR) - req = rem; + tv.tv_sec = usec / 1000000; + tv.tv_usec = usec % 1000000; + select (0, NULL, NULL, NULL, &tv); #endif + } } + -- cgit v1.2.3