2011-06-25 Paul Eggert <eggert@cs.ucla.edu>
+ 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.
+ This doesn't fix any bugs, but it simplifies the computation of
+ the remaining delay. Found while auditing integer overflow issues.
+
dup2: remove test for existence of fcntl
* m4/dup2.m4 (gl_FUNC_DUP2): Use "#ifdef FD_CLOEXEC", not
"#if HAVE_FCNTL", in the configure-time test program.
const time_t limit = 24 * 24 * 60 * 60;
time_t seconds = requested_delay->tv_sec;
struct timespec intermediate;
- intermediate.tv_nsec = 0;
+ intermediate.tv_nsec = requested_delay->tv_nsec;
while (limit < seconds)
{
if (result)
{
if (remaining_delay)
- {
- remaining_delay->tv_sec += seconds;
- remaining_delay->tv_nsec += requested_delay->tv_nsec;
- if (BILLION <= requested_delay->tv_nsec)
- {
- remaining_delay->tv_sec++;
- remaining_delay->tv_nsec -= BILLION;
- }
- }
+ remaining_delay->tv_sec += seconds;
return result;
}
+ intermediate.tv_nsec = 0;
}
intermediate.tv_sec = seconds;
- intermediate.tv_nsec = requested_delay->tv_nsec;
return nanosleep (&intermediate, remaining_delay);
}
}