diff options
author | Daniel Stenberg <daniel@haxx.se> | 2009-11-04 23:09:17 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2009-11-04 23:09:17 +0000 |
commit | 257f2376d59ebde87645c207d5006d4657352bbb (patch) | |
tree | 5f0feb1c4110c527f3fad95048acf69837970b21 /lib/progress.c | |
parent | 1d8d389bced14fd724ba3f0ccd553f4a90363ca5 (diff) | |
download | curl-257f2376d59ebde87645c207d5006d4657352bbb.tar.gz |
- I fixed several problems with the transfer progress meter. It showed the
wrong percentage for small files, most notable for <1000 bytes and could
easily end up showing more than 100% at the end. It also didn't show any
percentage, transfer size or estimated transfer times when transferring
less than 100 bytes.
Diffstat (limited to 'lib/progress.c')
-rw-r--r-- | lib/progress.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/lib/progress.c b/lib/progress.c index eddd852c1..c96db2abb 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -370,21 +370,29 @@ int Curl_pgrsUpdate(struct connectdata *conn) } /* Figure out the estimated time of arrival for the upload */ - if((data->progress.flags & PGRS_UL_SIZE_KNOWN) && - (data->progress.ulspeed > CURL_OFF_T_C(0)) && - (data->progress.size_ul > CURL_OFF_T_C(100)) ) { + if((data->progress.flags & PGRS_UL_SIZE_KNOWN) && + (data->progress.ulspeed > CURL_OFF_T_C(0))) { ulestimate = data->progress.size_ul / data->progress.ulspeed; - ulpercen = data->progress.uploaded / - (data->progress.size_ul/CURL_OFF_T_C(100)); + + if(data->progress.size_ul > CURL_OFF_T_C(10000) ) + ulpercen = data->progress.uploaded / + (data->progress.size_ul/CURL_OFF_T_C(100)); + else + ulpercen = (data->progress.uploaded*100) / + data->progress.size_ul; } /* ... and the download */ if((data->progress.flags & PGRS_DL_SIZE_KNOWN) && - (data->progress.dlspeed > CURL_OFF_T_C(0)) && - (data->progress.size_dl > CURL_OFF_T_C(100))) { + (data->progress.dlspeed > CURL_OFF_T_C(0)) ) { dlestimate = data->progress.size_dl / data->progress.dlspeed; - dlpercen = data->progress.downloaded / - (data->progress.size_dl/CURL_OFF_T_C(100)); + + if(data->progress.size_dl > CURL_OFF_T_C(10000)) + dlpercen = data->progress.downloaded / + (data->progress.size_dl/CURL_OFF_T_C(100)); + else + dlpercen = (data->progress.downloaded*100) / + data->progress.size_dl; } /* Now figure out which of them is slower and use that one for the @@ -407,9 +415,11 @@ int Curl_pgrsUpdate(struct connectdata *conn) total_transfer = data->progress.downloaded + data->progress.uploaded; /* Get the percentage of data transfered so far */ - if(total_expected_transfer > CURL_OFF_T_C(100)) + if(total_expected_transfer > CURL_OFF_T_C(10000)) total_percen = total_transfer / - (total_expected_transfer/CURL_OFF_T_C(100)); + (total_expected_transfer/CURL_OFF_T_C(100)); + else if(total_expected_transfer > 0) + total_percen = (total_transfer*100) / total_expected_transfer; fprintf(data->set.err, "\r" |