changeset 15324:04f6eb9c0c53

nanosleep: fix integer overflow problem * lib/nanosleep.c (my_usleep): Don't assume signed integer arithmetic wraps around on overflow.
author Paul Eggert <eggert@cs.ucla.edu>
date Sat, 25 Jun 2011 14:23:56 -0700
parents b4b10d174a9d
children 9c73c1ba1864
files ChangeLog lib/nanosleep.c
diffstat 2 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2011-06-25  Paul Eggert  <eggert@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.
--- a/lib/nanosleep.c
+++ b/lib/nanosleep.c
@@ -210,12 +210,11 @@
   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;
         }
     }