From 4aa819277730ab4b12c43267928cb9b9b9a4c8fd Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 25 Jun 2011 14:23:56 -0700 Subject: [PATCH] nanosleep: fix integer overflow problem * lib/nanosleep.c (my_usleep): Don't assume signed integer arithmetic wraps around on overflow. --- ChangeLog | 4 ++++ lib/nanosleep.c | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e39acf2c..846625820 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-06-25 Paul Eggert + nanosleep: fix integer overflow problem + * lib/nanosleep.c (my_usleep): Don't assume signed integer + arithmetic wraps around on overflow. + nanosleep: simplify carrying * lib/nanosleep.c (nanosleep): Use the requested tv_nsec for the first call to the underyling nanosleep, not for the last one. diff --git a/lib/nanosleep.c b/lib/nanosleep.c index aae2653b7..e08c00268 100644 --- a/lib/nanosleep.c +++ b/lib/nanosleep.c @@ -210,12 +210,11 @@ my_usleep (const struct timespec *ts_delay) tv_delay.tv_usec = (ts_delay->tv_nsec + 999) / 1000; if (tv_delay.tv_usec == 1000000) { - time_t t1 = tv_delay.tv_sec + 1; - if (t1 < tv_delay.tv_sec) + if (tv_delay.tv_sec == TYPE_MAXIMUM (time_t)) tv_delay.tv_usec = 1000000 - 1; /* close enough */ else { - tv_delay.tv_sec = t1; + tv_delay.tv_sec++; tv_delay.tv_usec = 0; } } -- 2.11.0