From 7591e07b7c3715d92cc6b4fce664883b3f50898f Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Wed, 5 May 2004 07:17:37 +0000
Subject: [PATCH] do the alarm time-left math using unsigned longs since that
 is what alarm() returns and uses as input and converting to signed generates
 warnings and actually risks loss of accuracy

---
 lib/url.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/lib/url.c b/lib/url.c
index 215a1bbd3d..398815384f 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -3174,14 +3174,16 @@ static CURLcode CreateConnection(struct SessionHandle *data,
        the time we spent until now! */
     if(prev_alarm) {
       /* there was an alarm() set before us, now put it back */
-      long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created);
-      long alarm_set;
+      unsigned long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created);
+      unsigned long alarm_set;
 
       /* the alarm period is counted in even number of seconds */
       alarm_set = prev_alarm - elapsed_ms/1000;
-
-      if(alarm_set<=0) {
-        /* if it turned negative, we should fire off a SIGALRM here, but we
+      
+      if(!alarm_set ||
+         ((alarm_set >= 0x80000000) && (prev_alarm < 0x80000000)) ) {
+        /* if the alarm time-left reached zero or turned "negative" (counted
+           with unsigned values), we should fire off a SIGALRM here, but we
            won't, and zero would be to switch it off so we never set it to
            less than 1! */
         alarm(1);
-- 
GitLab