]> Savannah Git Hosting - gnulib.git/commitdiff
nap.h: Fix logic.
authorBruno Haible <bruno@clisp.org>
Sun, 23 Apr 2017 17:09:32 +0000 (19:09 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 24 Apr 2017 22:02:34 +0000 (00:02 +0200)
* tests/nap.h (nap): Avoid signed integer overflow in loop.

ChangeLog
tests/nap.h

index 4661d2575b18cab607d1c5827c924551b5de97b6..bde4ac7dd247c4bea74cedcd0b8e1baaf42fdbae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-23  Bruno Haible  <bruno@clisp.org>
+
+       nap.h: Fix logic.
+       * tests/nap.h (nap): Avoid signed integer overflow in loop.
+
 2017-04-23  Bruno Haible  <bruno@clisp.org>
 
        Fix conflict between strerror_r-posix module and AC_FUNC_STRERROR_R.
index b2726d7c714fa35bb68c964c0797c4e53c2ba08a..ce8f95a5e59c5be9b1e87de1142d7319eb51c5e0 100644 (file)
@@ -117,9 +117,18 @@ nap (void)
     delay = delay / 2;  /* Try half of the previous delay.  */
   ASSERT (0 < delay);
 
-  for ( ; delay <= 2147483647; delay = delay * 2)
-    if (nap_works (nap_fd, delay, old_st))
-      return;
+  for (;;)
+    {
+      if (nap_works (delay, old_st))
+        return;
+      if (delay <= (2147483647 - 1) / 2)
+        {
+          delay = delay * 2 + 1;
+          continue;
+        }
+      else
+        break;
+    }
 
   /* Bummer: even the highest nap delay didn't work. */
   ASSERT (0);