mirror of
https://github.com/curl/curl.git
synced 2026-07-24 01:47:20 +03:00
progress: show fewer digits
Without unit, show up to 99999 "raw" (5 digits). After that, prefer to show the number as less than 1000 per unit and use single decimal fraction. Like '123.4M' (spending 6 characters). This now makes the largest possible size to show 8.0E (exabytes). Probably makes the output easier to read. Fixes #19431 Reported-by: Fd929c2CE5fA on github Closes #19433
This commit is contained in:
parent
0dacc07969
commit
28380bb9fd
1 changed files with 20 additions and 26 deletions
|
|
@ -67,33 +67,27 @@ static void time2str(char *r, curl_off_t seconds)
|
|||
Add suffix k, M, G when suitable... */
|
||||
static char *max6data(curl_off_t bytes, char *max6)
|
||||
{
|
||||
/* a signed 64-bit value is 8192 petabytes maximum */
|
||||
const char unit[] = { 'k', 'M', 'G', 'T', 'P', 0 };
|
||||
int k = 0;
|
||||
if(bytes < 1000000) {
|
||||
curl_msnprintf(max6, 7, "%5" CURL_FORMAT_CURL_OFF_T, bytes);
|
||||
return max6;
|
||||
/* a signed 64-bit value is 8192 petabytes maximum, shown as
|
||||
8.0E (exabytes)*/
|
||||
if(bytes < 100000)
|
||||
curl_msnprintf(max6, 7, "%6" CURL_FORMAT_CURL_OFF_T, bytes);
|
||||
else {
|
||||
const char unit[] = { 'k', 'M', 'G', 'T', 'P', 'E', 0 };
|
||||
int k = 0;
|
||||
curl_off_t nbytes;
|
||||
do {
|
||||
nbytes = bytes / 1024;
|
||||
if(nbytes < 1000)
|
||||
break;
|
||||
bytes = nbytes;
|
||||
k++;
|
||||
DEBUGASSERT(unit[k]);
|
||||
} while(unit[k]);
|
||||
/* xxx.yU */
|
||||
curl_msnprintf(max6, 7, "%3" CURL_FORMAT_CURL_OFF_T
|
||||
".%" CURL_FORMAT_CURL_OFF_T "%c", nbytes,
|
||||
(bytes%1024) / (1024/10), unit[k]);
|
||||
}
|
||||
|
||||
do {
|
||||
curl_off_t nbytes = bytes / 1024;
|
||||
if(nbytes < 1000) {
|
||||
/* xxx.yU */
|
||||
curl_msnprintf(max6, 7, "%3" CURL_FORMAT_CURL_OFF_T
|
||||
".%" CURL_FORMAT_CURL_OFF_T "%c", nbytes,
|
||||
(bytes%1024) / (1024/10), unit[k]);
|
||||
break;
|
||||
}
|
||||
else if(nbytes < 100000) {
|
||||
/* xxxxxU */
|
||||
curl_msnprintf(max6, 7, "%5" CURL_FORMAT_CURL_OFF_T "%c",
|
||||
nbytes, unit[k]);
|
||||
break;
|
||||
}
|
||||
bytes = nbytes;
|
||||
k++;
|
||||
DEBUGASSERT(unit[k]);
|
||||
} while(unit[k]);
|
||||
return max6;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue