summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-06-25 14:23:56 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2011-06-25 14:23:56 -0700
commit4aa819277730ab4b12c43267928cb9b9b9a4c8fd (patch)
tree7cd391b112de31d37f41d05fdba44a65743e7ab3 /lib
parentc4c53bb2f7c0a05e9795da46ea3ddc17b2ef0c78 (diff)
downloadgnulib-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.c5
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;
}
}