mirror of
https://github.com/curl/curl.git
synced 2026-04-14 22:01:41 +03:00
lib: change progress bitwise ops to bitfields
Since they are mostly independent, using them as bitfelds makes the code easier. - remove the unused struct field 'width'. - convert 'speeder_c' to an unsigned char from int Closes #17431
This commit is contained in:
parent
37b25f7bb0
commit
129719c29c
7 changed files with 39 additions and 45 deletions
|
|
@ -987,7 +987,7 @@ CURL *curl_easy_duphandle(CURL *d)
|
|||
if(dupset(outcurl, data))
|
||||
goto fail;
|
||||
|
||||
outcurl->progress.flags = data->progress.flags;
|
||||
outcurl->progress.hide = data->progress.hide;
|
||||
outcurl->progress.callback = data->progress.callback;
|
||||
|
||||
#ifndef CURL_DISABLE_COOKIES
|
||||
|
|
@ -1099,7 +1099,7 @@ void curl_easy_reset(CURL *d)
|
|||
/* zero out PureInfo data: */
|
||||
Curl_initinfo(data);
|
||||
|
||||
data->progress.flags |= PGRS_HIDE;
|
||||
data->progress.hide = TRUE;
|
||||
data->state.current_speed = -1; /* init to negative == impossible */
|
||||
data->state.retrycount = 0; /* reset the retry counter */
|
||||
|
||||
|
|
|
|||
|
|
@ -422,11 +422,11 @@ static CURLcode getinfo_offt(struct Curl_easy *data, CURLINFO info,
|
|||
*param_offt = data->progress.ul.speed;
|
||||
break;
|
||||
case CURLINFO_CONTENT_LENGTH_DOWNLOAD_T:
|
||||
*param_offt = (data->progress.flags & PGRS_DL_SIZE_KNOWN) ?
|
||||
*param_offt = data->progress.dl_size_known ?
|
||||
data->progress.dl.total_size : -1;
|
||||
break;
|
||||
case CURLINFO_CONTENT_LENGTH_UPLOAD_T:
|
||||
*param_offt = (data->progress.flags & PGRS_UL_SIZE_KNOWN) ?
|
||||
*param_offt = data->progress.ul_size_known ?
|
||||
data->progress.ul.total_size : -1;
|
||||
break;
|
||||
case CURLINFO_TOTAL_TIME_T:
|
||||
|
|
@ -534,11 +534,11 @@ static CURLcode getinfo_double(struct Curl_easy *data, CURLINFO info,
|
|||
*param_doublep = (double)data->progress.ul.speed;
|
||||
break;
|
||||
case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
|
||||
*param_doublep = (data->progress.flags & PGRS_DL_SIZE_KNOWN) ?
|
||||
*param_doublep = data->progress.dl_size_known ?
|
||||
(double)data->progress.dl.total_size : -1;
|
||||
break;
|
||||
case CURLINFO_CONTENT_LENGTH_UPLOAD:
|
||||
*param_doublep = (data->progress.flags & PGRS_UL_SIZE_KNOWN) ?
|
||||
*param_doublep = data->progress.ul_size_known ?
|
||||
(double)data->progress.ul.total_size : -1;
|
||||
break;
|
||||
case CURLINFO_REDIRECT_TIME:
|
||||
|
|
|
|||
|
|
@ -136,8 +136,7 @@ int Curl_pgrsDone(struct Curl_easy *data)
|
|||
if(rc)
|
||||
return rc;
|
||||
|
||||
if(!(data->progress.flags & PGRS_HIDE) &&
|
||||
!data->progress.callback)
|
||||
if(!data->progress.hide && !data->progress.callback)
|
||||
/* only output if we do not use a progress callback and we are not
|
||||
* hidden */
|
||||
fprintf(data->set.err, "\n");
|
||||
|
|
@ -247,18 +246,20 @@ struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer)
|
|||
|
||||
void Curl_pgrsStartNow(struct Curl_easy *data)
|
||||
{
|
||||
data->progress.speeder_c = 0; /* reset the progress meter display */
|
||||
data->progress.start = curlx_now();
|
||||
data->progress.is_t_startransfer_set = FALSE;
|
||||
data->progress.ul.limit.start = data->progress.start;
|
||||
data->progress.dl.limit.start = data->progress.start;
|
||||
data->progress.ul.limit.start_size = 0;
|
||||
data->progress.dl.limit.start_size = 0;
|
||||
data->progress.dl.cur_size = 0;
|
||||
data->progress.ul.cur_size = 0;
|
||||
/* clear all bits except HIDE and HEADERS_OUT */
|
||||
data->progress.flags &= PGRS_HIDE|PGRS_HEADERS_OUT;
|
||||
Curl_ratelimit(data, data->progress.start);
|
||||
struct Progress *p = &data->progress;
|
||||
p->speeder_c = 0; /* reset the progress meter display */
|
||||
p->start = curlx_now();
|
||||
p->is_t_startransfer_set = FALSE;
|
||||
p->ul.limit.start = p->start;
|
||||
p->dl.limit.start = p->start;
|
||||
p->ul.limit.start_size = 0;
|
||||
p->dl.limit.start_size = 0;
|
||||
p->dl.cur_size = 0;
|
||||
p->ul.cur_size = 0;
|
||||
/* the sizes are unknown at start */
|
||||
p->dl_size_known = FALSE;
|
||||
p->ul_size_known = FALSE;
|
||||
Curl_ratelimit(data, p->start);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -361,11 +362,11 @@ void Curl_pgrsSetDownloadSize(struct Curl_easy *data, curl_off_t size)
|
|||
{
|
||||
if(size >= 0) {
|
||||
data->progress.dl.total_size = size;
|
||||
data->progress.flags |= PGRS_DL_SIZE_KNOWN;
|
||||
data->progress.dl_size_known = TRUE;
|
||||
}
|
||||
else {
|
||||
data->progress.dl.total_size = 0;
|
||||
data->progress.flags &= ~PGRS_DL_SIZE_KNOWN;
|
||||
data->progress.dl_size_known = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -373,11 +374,11 @@ void Curl_pgrsSetUploadSize(struct Curl_easy *data, curl_off_t size)
|
|||
{
|
||||
if(size >= 0) {
|
||||
data->progress.ul.total_size = size;
|
||||
data->progress.flags |= PGRS_UL_SIZE_KNOWN;
|
||||
data->progress.ul_size_known = TRUE;
|
||||
}
|
||||
else {
|
||||
data->progress.ul.total_size = 0;
|
||||
data->progress.flags &= ~PGRS_UL_SIZE_KNOWN;
|
||||
data->progress.ul_size_known = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -515,7 +516,7 @@ static void progress_meter(struct Curl_easy *data)
|
|||
char time_spent[10];
|
||||
curl_off_t cur_secs = (curl_off_t)p->timespent/1000000; /* seconds */
|
||||
|
||||
if(!(p->flags & PGRS_HEADERS_OUT)) {
|
||||
if(!p->headers_out) {
|
||||
if(data->state.resume_from) {
|
||||
fprintf(data->set.err,
|
||||
"** Resuming transfer from byte position %" FMT_OFF_T "\n",
|
||||
|
|
@ -526,12 +527,12 @@ static void progress_meter(struct Curl_easy *data)
|
|||
"Time Time Time Current\n"
|
||||
" Dload Upload "
|
||||
"Total Spent Left Speed\n");
|
||||
p->flags |= PGRS_HEADERS_OUT; /* headers are shown */
|
||||
p->headers_out = TRUE; /* headers are shown */
|
||||
}
|
||||
|
||||
/* Figure out the estimated time of arrival for upload and download */
|
||||
pgrs_estimates(&p->ul, (p->flags & PGRS_UL_SIZE_KNOWN), &ul_estm);
|
||||
pgrs_estimates(&p->dl, (p->flags & PGRS_DL_SIZE_KNOWN), &dl_estm);
|
||||
pgrs_estimates(&p->ul, (bool)p->ul_size_known, &ul_estm);
|
||||
pgrs_estimates(&p->dl, (bool)p->dl_size_known, &dl_estm);
|
||||
|
||||
/* Since both happen at the same time, total expected duration is max. */
|
||||
total_estm.secs = CURLMAX(ul_estm.secs, dl_estm.secs);
|
||||
|
|
@ -542,10 +543,10 @@ static void progress_meter(struct Curl_easy *data)
|
|||
|
||||
/* Get the total amount of data expected to get transferred */
|
||||
total_expected_size =
|
||||
((p->flags & PGRS_UL_SIZE_KNOWN) ? p->ul.total_size : p->ul.cur_size);
|
||||
p->ul_size_known ? p->ul.total_size : p->ul.cur_size;
|
||||
|
||||
dl_size =
|
||||
((p->flags & PGRS_DL_SIZE_KNOWN) ? p->dl.total_size : p->dl.cur_size);
|
||||
p->dl_size_known ? p->dl.total_size : p->dl.cur_size;
|
||||
|
||||
/* integer overflow check */
|
||||
if((CURL_OFF_T_MAX - total_expected_size) < dl_size)
|
||||
|
|
@ -593,7 +594,7 @@ static void progress_meter(struct Curl_easy *data)
|
|||
*/
|
||||
static int pgrsupdate(struct Curl_easy *data, bool showprogress)
|
||||
{
|
||||
if(!(data->progress.flags & PGRS_HIDE)) {
|
||||
if(!data->progress.hide) {
|
||||
if(data->set.fxferinfo) {
|
||||
int result;
|
||||
/* There is a callback set, call that */
|
||||
|
|
|
|||
|
|
@ -71,9 +71,4 @@ void Curl_pgrsTimeWas(struct Curl_easy *data, timerid timer,
|
|||
|
||||
void Curl_pgrsEarlyData(struct Curl_easy *data, curl_off_t sent);
|
||||
|
||||
#define PGRS_HIDE (1<<4)
|
||||
#define PGRS_UL_SIZE_KNOWN (1<<5)
|
||||
#define PGRS_DL_SIZE_KNOWN (1<<6)
|
||||
#define PGRS_HEADERS_OUT (1<<7) /* set when the headers have been written */
|
||||
|
||||
#endif /* HEADER_CURL_PROGRESS_H */
|
||||
|
|
|
|||
|
|
@ -473,10 +473,7 @@ static CURLcode setopt_long(struct Curl_easy *data, CURLoption option,
|
|||
/*
|
||||
* Shut off the internal supported progress meter
|
||||
*/
|
||||
if(enabled)
|
||||
data->progress.flags |= PGRS_HIDE;
|
||||
else
|
||||
data->progress.flags &= ~PGRS_HIDE;
|
||||
data->progress.hide = enabled;
|
||||
break;
|
||||
case CURLOPT_NOBODY:
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -529,7 +529,7 @@ CURLcode Curl_open(struct Curl_easy **curl)
|
|||
data->id = -1;
|
||||
data->mid = UINT_MAX;
|
||||
data->master_mid = UINT_MAX;
|
||||
data->progress.flags |= PGRS_HIDE;
|
||||
data->progress.hide = TRUE;
|
||||
data->state.current_speed = -1; /* init to negative == impossible */
|
||||
|
||||
Curl_hash_init(&data->meta_hash, 23,
|
||||
|
|
|
|||
|
|
@ -978,9 +978,6 @@ struct Progress {
|
|||
curl_off_t current_speed; /* uses the currently fastest transfer */
|
||||
curl_off_t earlydata_sent;
|
||||
|
||||
int width; /* screen width at download start */
|
||||
int flags; /* see progress.h */
|
||||
|
||||
timediff_t timespent;
|
||||
|
||||
timediff_t t_postqueue;
|
||||
|
|
@ -1002,7 +999,11 @@ struct Progress {
|
|||
|
||||
curl_off_t speeder[ CURR_TIME ];
|
||||
struct curltime speeder_time[ CURR_TIME ];
|
||||
int speeder_c;
|
||||
unsigned char speeder_c;
|
||||
BIT(hide);
|
||||
BIT(ul_size_known);
|
||||
BIT(dl_size_known);
|
||||
BIT(headers_out); /* when the headers have been written */
|
||||
BIT(callback); /* set when progress callback is used */
|
||||
BIT(is_t_startransfer_set);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue