diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-06-25 14:23:56 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-06-25 14:23:56 -0700 |
commit | 4aa819277730ab4b12c43267928cb9b9b9a4c8fd (patch) | |
tree | 7cd391b112de31d37f41d05fdba44a65743e7ab3 /lib | |
parent | c4c53bb2f7c0a05e9795da46ea3ddc17b2ef0c78 (diff) | |
download | gnulib-4aa819277730ab4b12c43267928cb9b9b9a4c8fd.tar.gz |
nanosleep: fix integer overflow problem
* lib/nanosleep.c (my_usleep): Don't assume signed integer
arithmetic wraps around on overflow.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/nanosleep.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/nanosleep.c b/lib/nanosleep.c index aae2653b72..e08c002683 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; } } |