Skip to content

Commit

Permalink
timeval: prefer time_t to hold seconds instead of long
Browse files Browse the repository at this point in the history
... as long is still 32bit on modern 64bit windows machines, while
time_t is generally 64bit.
  • Loading branch information
bagder committed Nov 12, 2016
1 parent 56bb7b1 commit de4de4e
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 27 deletions.
34 changes: 18 additions & 16 deletions lib/progress.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,24 +249,26 @@ long Curl_pgrsLimitWaitTime(curl_off_t cursize,
struct timeval start,
struct timeval now)
{
curl_off_t size = cursize - startsize;
long minimum, actual;
curl_off_t size = cursize - startsize;
size_t minimum;
size_t actual;

/* we don't have a starting point yet -- return 0 so it gets (re)set */
if(start.tv_sec == 0 && start.tv_usec == 0)
return 0;
/* we don't have a starting point yet -- return 0 so it gets (re)set */
if(start.tv_sec == 0 && start.tv_usec == 0)
return 0;

/* not enough data yet */
if(size < limit)
return -1;
/* not enough data yet */
if(size < limit)
return -1;

minimum = (long) (CURL_OFF_T_C(1000) * size / limit);
actual = Curl_tvdiff(now, start);
minimum = (time_t) (CURL_OFF_T_C(1000) * size / limit);
actual = Curl_tvdiff(now, start);

if(actual < minimum)
return minimum - actual;
else
return 0;
if(actual < minimum)
/* this is a conversion on some systems (64bit time_t => 32bit long) */
return (long)(minimum - actual);
else
return 0;
}

void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size)
Expand Down Expand Up @@ -373,7 +375,7 @@ int Curl_pgrsUpdate(struct connectdata *conn)
(data->progress.timespent>0?data->progress.timespent:1));

/* 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;

data->progress.lastshow = now.tv_sec;
Expand All @@ -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 */
if(countindex) {
long span_ms;
time_t span_ms;

/* Get the index position to compare with the 'nowindex' position.
Get the oldest entry possible. While we have less than CURR_TIME
Expand Down
6 changes: 3 additions & 3 deletions lib/speedcheck.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
* you should have received as part of this distribution. The terms
Expand Down Expand Up @@ -40,8 +40,8 @@ CURLcode Curl_speedcheck(struct Curl_easy *data,
data->set.low_speed_time &&
(Curl_tvlong(data->state.keeps_speed) != 0) &&
(data->progress.current_speed < data->set.low_speed_limit)) {
long howlong = Curl_tvdiff(now, data->state.keeps_speed);
long nextcheck = (data->set.low_speed_time * 1000) - howlong;
time_t howlong = Curl_tvdiff(now, data->state.keeps_speed);
time_t nextcheck = (data->set.low_speed_time * 1000) - howlong;

/* We are now below the "low speed limit". If we are below it
for "low speed time" seconds we consider that enough reason
Expand Down
6 changes: 3 additions & 3 deletions lib/timeval.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ struct timeval curlx_tvnow(void)
* Returns: the time difference in number of milliseconds. For large diffs it
* 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
/* for 32bit time_t systems, add a precaution to avoid overflow for really
Expand All @@ -126,7 +126,7 @@ long curlx_tvdiff(struct timeval newer, struct timeval older)
return 0x7fffffff;
#endif
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;
}

/*
Expand All @@ -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 */
long Curl_tvlong(struct timeval t1)
time_t Curl_tvlong(struct timeval t1)
{
return t1.tv_sec;
}
6 changes: 3 additions & 3 deletions lib/timeval.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
* you should have received as part of this distribution. The terms
Expand Down Expand Up @@ -37,7 +37,7 @@ struct timeval curlx_tvnow(void);
*
* 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.
Expand All @@ -46,7 +46,7 @@ long curlx_tvdiff(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
internals only. */
Expand Down
4 changes: 2 additions & 2 deletions lib/urldata.h
Original file line number Diff line number Diff line change
Expand Up @@ -1146,8 +1146,8 @@ struct PureInfo {


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

0 comments on commit de4de4e

Please sign in to comment.