]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
lib: change progress bitwise ops to bitfields
authorDaniel Stenberg <daniel@haxx.se>
Fri, 23 May 2025 14:47:52 +0000 (16:47 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 23 May 2025 21:13:03 +0000 (23:13 +0200)
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

lib/easy.c
lib/getinfo.c
lib/progress.c
lib/progress.h
lib/setopt.c
lib/url.c
lib/urldata.h

index 9d824244e9bce665508555a8f5ee6dc7005c6f68..3f867862523f7272376fa3175a879abb401d3257 100644 (file)
@@ -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 */
 
index a81521040c7ffc718cdcf278a28a501d4cf8106a..388646bf7514b18d43be92f0e8849759a2521766 100644 (file)
@@ -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:
index 1d675cd5b628ee10ec43612d3cd0eff5d10db4cc..8e6d98f0d980ddec616d3e949bbd0744f355add2 100644 (file)
@@ -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 */
index 8abd269420dc0d1a2edd04473859b2591da1fd57..bbe135cdbcd7fbf448418b1520f83fef3b4b075e 100644 (file)
@@ -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 */
index cc243dde1fedd844ffea86c3aec62b9fd1ad9814..dae870a5c9fc01e6f4505c521b72c4fa86c8c8f7 100644 (file)
@@ -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:
     /*
index fd4eb53ffd2a889a635614a6a489c94883da74d3..dac24b35e75113eb3feb2024fe96404efec7b260 100644 (file)
--- 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,
index 076345ca20fc38aa9830cbd8e85d85974ec7703c..45052e84b18bf8436f266d60076ec5824d186032 100644 (file)
@@ -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);
 };