diff options
-rw-r--r-- | bin/sleep/sleep.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/bin/sleep/sleep.c b/bin/sleep/sleep.c index 7de9e9a1083..2933eafaab8 100644 --- a/bin/sleep/sleep.c +++ b/bin/sleep/sleep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sleep.c,v 1.26 2018/02/04 02:18:15 cheloha Exp $ */ +/* $OpenBSD: sleep.c,v 1.27 2019/01/10 16:41:10 cheloha Exp $ */ /* $NetBSD: sleep.c,v 1.8 1995/03/21 09:11:11 cgd Exp $ */ /* @@ -30,6 +30,8 @@ * SUCH DAMAGE. */ +#include <sys/time.h> + #include <ctype.h> #include <signal.h> #include <stdio.h> @@ -101,24 +103,14 @@ main(int argc, char *argv[]) } } - while (secs > 0 || nsecs > 0) { - /* - * nanosleep(2) supports a maximum of 100 million - * seconds, so we break the nap up into multiple - * calls if we have more than that. - */ - if (secs > 100000000) { - rqtp.tv_sec = 100000000; - rqtp.tv_nsec = 0; - } else { - rqtp.tv_sec = secs; - rqtp.tv_nsec = nsecs; - } - if (nanosleep(&rqtp, NULL)) + rqtp.tv_sec = secs; + rqtp.tv_nsec = nsecs; + + if (timespecisset(&rqtp)) { + if (nanosleep(&rqtp, NULL) == -1) err(1, NULL); - secs -= rqtp.tv_sec; - nsecs -= rqtp.tv_nsec; } + return (0); } |