* lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 8 Oct 2007 23:26:12 +0000 (16:26 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 8 Oct 2007 23:26:12 +0000 (16:26 -0700)
when avoiding problems with integer overflow.  Use a portable test
instead.

ChangeLog
lib/xnanosleep.c

index a001645..a8c5a9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior
+       when avoiding problems with integer overflow.  Use a portable test
+       instead.
+
 2007-10-08  Simon Josefsson  <simon@josefsson.org>
 
        * modules/dummy (License): Change to LGPLv2+.
index 22bd53a..317e40a 100644 (file)
@@ -72,15 +72,13 @@ xnanosleep (double seconds)
   /* Normalize the interval length.  nanosleep requires this.  */
   if (BILLION <= ts_sleep.tv_nsec)
     {
-      /* Declare "volatile" so that gcc-4.3.0 doesn't optimize away
-        the overflow test.  */
-      volatile time_t t = ts_sleep.tv_sec + 1;
-
-      /* Detect integer overflow.  */
-      overflow |= (t < ts_sleep.tv_sec);
-
-      ts_sleep.tv_sec = t;
-      ts_sleep.tv_nsec -= BILLION;
+      if (ts_sleep.tv_sec == TIME_T_MAX)
+       overflow = true;
+      else
+       {
+         ts_sleep.tv_sec++;
+         ts_sleep.tv_nsec -= BILLION;
+       }
     }
 
   for (;;)