* 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 8e39acf..8466258 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-06-25 Paul Eggert <egg...@cs.ucla.edu> + 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 aae2653..e08c002 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; } } -- 1.7.4.4