diff --git a/lib/cw-out.c b/lib/cw-out.c index 31d6b8f8b5..437ded3a66 100644 --- a/lib/cw-out.c +++ b/lib/cw-out.c @@ -254,12 +254,14 @@ static CURLcode cw_out_ptr_flush(struct cw_out_ctx *ctx, break; wlen = max_write ? CURLMIN(blen, max_write) : blen; if(otype == CW_OUT_BODY) - result = Curl_pgrs_deliver_inc(data, wlen); + result = Curl_pgrs_deliver_check(data, wlen); if(!result) result = cw_out_cb_write(ctx, data, wcb, wcb_data, otype, buf, wlen, &nwritten); if(result) return result; + if(otype == CW_OUT_BODY && nwritten) + Curl_pgrs_deliver_inc(data, nwritten); *pconsumed += nwritten; blen -= nwritten; buf += nwritten; diff --git a/lib/progress.c b/lib/progress.c index f01919ff26..f21f50eb3b 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -342,15 +342,21 @@ void Curl_pgrsStartNow(struct Curl_easy *data) /* this counts how much data is delivered to the application, which in compressed cases may differ from downloaded amount */ -CURLcode Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta) +CURLcode Curl_pgrs_deliver_check(struct Curl_easy *data, size_t delta) { if(data->set.max_filesize && ((curl_off_t)delta > data->set.max_filesize - data->progress.deliver)) return CURLE_FILESIZE_EXCEEDED; - data->progress.deliver += delta; return CURLE_OK; } +/* the check is already done, this is okay */ +void Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta) +{ + data->progress.deliver += delta; +} + + void Curl_pgrs_download_inc(struct Curl_easy *data, size_t delta) { if(delta) { diff --git a/lib/progress.h b/lib/progress.h index 020113087c..82b0ec7e8c 100644 --- a/lib/progress.h +++ b/lib/progress.h @@ -50,7 +50,8 @@ int Curl_pgrsDone(struct Curl_easy *data); void Curl_pgrsStartNow(struct Curl_easy *data); void Curl_pgrsSetDownloadSize(struct Curl_easy *data, curl_off_t size); void Curl_pgrsSetUploadSize(struct Curl_easy *data, curl_off_t size); -CURLcode Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta); +CURLcode Curl_pgrs_deliver_check(struct Curl_easy *data, size_t delta); +void Curl_pgrs_deliver_inc(struct Curl_easy *data, size_t delta); void Curl_pgrs_download_inc(struct Curl_easy *data, size_t delta); void Curl_pgrs_upload_inc(struct Curl_easy *data, size_t delta); void Curl_pgrsSetUploadCounter(struct Curl_easy *data, curl_off_t size);