From: Paul Eggert Date: Mon, 8 Oct 2007 23:26:12 +0000 (-0700) Subject: * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior X-Git-Tag: v0.0~108 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=36fa078f51a43eef774eca7d7e66455d83d5ca07;p=gnulib.git * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior when avoiding problems with integer overflow. Use a portable test instead. --- diff --git a/ChangeLog b/ChangeLog index a00164578..a8c5a9ec3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-10-08 Paul Eggert + + * 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 * modules/dummy (License): Change to LGPLv2+. diff --git a/lib/xnanosleep.c b/lib/xnanosleep.c index 22bd53a95..317e40ade 100644 --- a/lib/xnanosleep.c +++ b/lib/xnanosleep.c @@ -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 (;;)