fixup split the check and increment into separate functions

to deal with pausing proper and to make sure to not count non-delivered
data (like when error is returned)
This commit is contained in:
Daniel Stenberg 2026-03-02 13:11:07 +01:00
parent 2e4358716c
commit e1ea1d40cb
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
3 changed files with 13 additions and 4 deletions

View file

@ -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;

View file

@ -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) {

View file

@ -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);