From: Daniel Stenberg Date: Fri, 23 May 2025 14:47:52 +0000 (+0200) Subject: lib: change progress bitwise ops to bitfields X-Git-Tag: curl-8_14_0~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=129719c29c96833e68b14e3fc3a7c7d9d1c74501;p=thirdparty%2Fcurl.git 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 --- diff --git a/lib/easy.c b/lib/easy.c index 9d824244e9..3f86786252 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -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 */ diff --git a/lib/getinfo.c b/lib/getinfo.c index a81521040c..388646bf75 100644 --- a/lib/getinfo.c +++ b/lib/getinfo.c @@ -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: diff --git a/lib/progress.c b/lib/progress.c index 1d675cd5b6..8e6d98f0d9 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -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 */ diff --git a/lib/progress.h b/lib/progress.h index 8abd269420..bbe135cdbc 100644 --- a/lib/progress.h +++ b/lib/progress.h @@ -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 */ diff --git a/lib/setopt.c b/lib/setopt.c index cc243dde1f..dae870a5c9 100644 --- a/lib/setopt.c +++ b/lib/setopt.c @@ -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: /* diff --git a/lib/url.c b/lib/url.c index fd4eb53ffd..dac24b35e7 100644 --- a/lib/url.c +++ b/lib/url.c @@ -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, diff --git a/lib/urldata.h b/lib/urldata.h index 076345ca20..45052e84b1 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -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); };