summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Kaufmann <mail@michael-kaufmann.ch>2017-05-20 19:39:51 +0200
committerMichael Kaufmann <mail@michael-kaufmann.ch>2017-05-24 22:56:22 +0200
commit8ab22a74533acee61af31c48e75269822f408cb4 (patch)
tree24025f8450cf3b72eb5bf9316c1212b0a571363c /lib
parentb4d87f54d60711e936fefae388d741b281eecdf0 (diff)
downloadcurl-8ab22a74533acee61af31c48e75269822f408cb4.tar.gz
time: fix type conversions and compiler warnings
Fix bugs and compiler warnings on systems with 32-bit long and 64-bit time_t. Reviewed-by: Daniel Stenberg Closes #1499
Diffstat (limited to 'lib')
-rw-r--r--lib/asyn-ares.c10
-rw-r--r--lib/easy.c12
-rw-r--r--lib/hostip.c7
-rw-r--r--lib/timeval.c6
-rw-r--r--lib/timeval.h2
5 files changed, 20 insertions, 17 deletions
diff --git a/lib/asyn-ares.c b/lib/asyn-ares.c
index 12f35e412..fb3d3fec0 100644
--- a/lib/asyn-ares.c
+++ b/lib/asyn-ares.c
@@ -373,7 +373,6 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
/* Wait for the name resolve query to complete. */
while(!result) {
struct timeval *tvp, tv, store;
- long timediff;
int itimeout;
int timeout_ms;
@@ -402,8 +401,13 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
result = CURLE_ABORTED_BY_CALLBACK;
else {
struct timeval now2 = Curl_tvnow();
- timediff = Curl_tvdiff(now2, now); /* spent time */
- timeout -= timediff?timediff:1; /* always deduct at least 1 */
+ time_t timediff = Curl_tvdiff(now2, now); /* spent time */
+ if(timediff <= 0)
+ timeout -= 1; /* always deduct at least 1 */
+ else if(timediff > timeout)
+ timeout = -1;
+ else
+ timeout -= (long)timediff;
now = now2; /* for next loop */
}
if(timeout < 0)
diff --git a/lib/easy.c b/lib/easy.c
index 46c0a9911..2b1ce9e8a 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -615,12 +615,18 @@ static CURLcode wait_or_timeout(struct Curl_multi *multi, struct events *ev)
}
}
- if(!ev->msbump)
+ if(!ev->msbump) {
/* If nothing updated the timeout, we decrease it by the spent time.
* If it was updated, it has the new timeout time stored already.
*/
- ev->ms += (long)curlx_tvdiff(after, before);
-
+ time_t timediff = curlx_tvdiff(after, before);
+ if(timediff > 0) {
+ if(timediff > ev->ms)
+ ev->ms = 0;
+ else
+ ev->ms -= (long)timediff;
+ }
+ }
}
else
return CURLE_RECV_ERROR;
diff --git a/lib/hostip.c b/lib/hostip.c
index 21baf6015..619ec84b5 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -596,7 +596,7 @@ int Curl_resolv_timeout(struct connectdata *conn,
/* Ignore the timeout when signals are disabled */
timeout = 0;
else
- timeout = timeoutms;
+ timeout = (timeoutms > LONG_MAX) ? LONG_MAX : (long)timeoutms;
if(!timeout)
/* USE_ALARM_TIMEOUT defined, but no timeout actually requested */
@@ -688,10 +688,11 @@ clean_up:
the time we spent until now! */
if(prev_alarm) {
/* there was an alarm() set before us, now put it back */
- unsigned long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created);
+ unsigned long elapsed_secs = (unsigned long) (Curl_tvdiff(Curl_tvnow(),
+ conn->created) / 1000);
/* the alarm period is counted in even number of seconds */
- unsigned long alarm_set = prev_alarm - elapsed_ms/1000;
+ unsigned long alarm_set = prev_alarm - elapsed_secs;
if(!alarm_set ||
((alarm_set >= 0x80000000) && (prev_alarm < 0x80000000)) ) {
diff --git a/lib/timeval.c b/lib/timeval.c
index 0d6036b81..bed44c573 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -141,9 +141,3 @@ double curlx_tvdiff_secs(struct timeval newer, struct timeval older)
(double)(newer.tv_usec-older.tv_usec)/1000000.0;
return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
}
-
-/* return the number of seconds in the given input timeval struct */
-time_t Curl_tvlong(struct timeval t1)
-{
- return t1.tv_sec;
-}
diff --git a/lib/timeval.h b/lib/timeval.h
index 09f8b3a20..33969354d 100644
--- a/lib/timeval.h
+++ b/lib/timeval.h
@@ -46,8 +46,6 @@ time_t curlx_tvdiff(struct timeval t1, struct timeval t2);
*/
double curlx_tvdiff_secs(struct timeval t1, struct timeval t2);
-time_t Curl_tvlong(struct timeval t1);
-
/* These two defines below exist to provide the older API for library
internals only. */
#define Curl_tvnow() curlx_tvnow()