timeval: prefer time_t to hold seconds instead of long

... as long is still 32bit on modern 64bit windows machines, while
time_t is generally 64bit.
This commit is contained in:
Daniel Stenberg 2016-11-11 10:19:22 +01:00
parent 56bb7b1a3c
commit de4de4e3c7
5 changed files with 29 additions and 27 deletions

View File

@ -249,24 +249,26 @@ long Curl_pgrsLimitWaitTime(curl_off_t cursize,
struct timeval start, struct timeval start,
struct timeval now) struct timeval now)
{ {
curl_off_t size = cursize - startsize; curl_off_t size = cursize - startsize;
long minimum, actual; size_t minimum;
size_t actual;
/* we don't have a starting point yet -- return 0 so it gets (re)set */ /* we don't have a starting point yet -- return 0 so it gets (re)set */
if(start.tv_sec == 0 && start.tv_usec == 0) if(start.tv_sec == 0 && start.tv_usec == 0)
return 0; return 0;
/* not enough data yet */ /* not enough data yet */
if(size < limit) if(size < limit)
return -1; return -1;
minimum = (long) (CURL_OFF_T_C(1000) * size / limit); minimum = (time_t) (CURL_OFF_T_C(1000) * size / limit);
actual = Curl_tvdiff(now, start); actual = Curl_tvdiff(now, start);
if(actual < minimum) if(actual < minimum)
return minimum - actual; /* this is a conversion on some systems (64bit time_t => 32bit long) */
else return (long)(minimum - actual);
return 0; else
return 0;
} }
void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size) void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size)
@ -373,7 +375,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
(data->progress.timespent>0?data->progress.timespent:1)); (data->progress.timespent>0?data->progress.timespent:1));
/* Calculations done at most once a second, unless end is reached */ /* Calculations done at most once a second, unless end is reached */
if(data->progress.lastshow != (long)now.tv_sec) { if(data->progress.lastshow != now.tv_sec) {
shownow = TRUE; shownow = TRUE;
data->progress.lastshow = now.tv_sec; data->progress.lastshow = now.tv_sec;
@ -400,7 +402,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
/* first of all, we don't do this if there's no counted seconds yet */ /* first of all, we don't do this if there's no counted seconds yet */
if(countindex) { if(countindex) {
long span_ms; time_t span_ms;
/* Get the index position to compare with the 'nowindex' position. /* Get the index position to compare with the 'nowindex' position.
Get the oldest entry possible. While we have less than CURR_TIME Get the oldest entry possible. While we have less than CURR_TIME

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -40,8 +40,8 @@ CURLcode Curl_speedcheck(struct Curl_easy *data,
data->set.low_speed_time && data->set.low_speed_time &&
(Curl_tvlong(data->state.keeps_speed) != 0) && (Curl_tvlong(data->state.keeps_speed) != 0) &&
(data->progress.current_speed < data->set.low_speed_limit)) { (data->progress.current_speed < data->set.low_speed_limit)) {
long howlong = Curl_tvdiff(now, data->state.keeps_speed); time_t howlong = Curl_tvdiff(now, data->state.keeps_speed);
long nextcheck = (data->set.low_speed_time * 1000) - howlong; time_t nextcheck = (data->set.low_speed_time * 1000) - howlong;
/* We are now below the "low speed limit". If we are below it /* We are now below the "low speed limit". If we are below it
for "low speed time" seconds we consider that enough reason for "low speed time" seconds we consider that enough reason

View File

@ -116,7 +116,7 @@ struct timeval curlx_tvnow(void)
* Returns: the time difference in number of milliseconds. For large diffs it * Returns: the time difference in number of milliseconds. For large diffs it
* returns 0x7fffffff on 32bit time_t systems. * returns 0x7fffffff on 32bit time_t systems.
*/ */
long curlx_tvdiff(struct timeval newer, struct timeval older) time_t curlx_tvdiff(struct timeval newer, struct timeval older)
{ {
#if SIZEOF_TIME_T < 8 #if SIZEOF_TIME_T < 8
/* for 32bit time_t systems, add a precaution to avoid overflow for really /* for 32bit time_t systems, add a precaution to avoid overflow for really
@ -126,7 +126,7 @@ long curlx_tvdiff(struct timeval newer, struct timeval older)
return 0x7fffffff; return 0x7fffffff;
#endif #endif
return (newer.tv_sec-older.tv_sec)*1000+ return (newer.tv_sec-older.tv_sec)*1000+
(long)(newer.tv_usec-older.tv_usec)/1000; (time_t)(newer.tv_usec-older.tv_usec)/1000;
} }
/* /*
@ -144,7 +144,7 @@ double curlx_tvdiff_secs(struct timeval newer, struct timeval older)
} }
/* return the number of seconds in the given input timeval struct */ /* return the number of seconds in the given input timeval struct */
long Curl_tvlong(struct timeval t1) time_t Curl_tvlong(struct timeval t1)
{ {
return t1.tv_sec; return t1.tv_sec;
} }

View File

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -37,7 +37,7 @@ struct timeval curlx_tvnow(void);
* *
* Returns: the time difference in number of milliseconds. * Returns: the time difference in number of milliseconds.
*/ */
long curlx_tvdiff(struct timeval t1, struct timeval t2); time_t curlx_tvdiff(struct timeval t1, struct timeval t2);
/* /*
* Same as curlx_tvdiff but with full usec resolution. * Same as curlx_tvdiff but with full usec resolution.
@ -46,7 +46,7 @@ long curlx_tvdiff(struct timeval t1, struct timeval t2);
*/ */
double curlx_tvdiff_secs(struct timeval t1, struct timeval t2); double curlx_tvdiff_secs(struct timeval t1, struct timeval t2);
long Curl_tvlong(struct timeval t1); time_t Curl_tvlong(struct timeval t1);
/* These two defines below exist to provide the older API for library /* These two defines below exist to provide the older API for library
internals only. */ internals only. */

View File

@ -1146,8 +1146,8 @@ struct PureInfo {
struct Progress { struct Progress {
long lastshow; /* time() of the last displayed progress meter or NULL to time_t lastshow; /* time() of the last displayed progress meter or NULL to
force redraw at next call */ force redraw at next call */
curl_off_t size_dl; /* total expected size */ curl_off_t size_dl; /* total expected size */
curl_off_t size_ul; /* total expected size */ curl_off_t size_ul; /* total expected size */
curl_off_t downloaded; /* transferred so far */ curl_off_t downloaded; /* transferred so far */