diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/main.c b/src/main.c index c697f6d65..a9a0c30fc 100644 --- a/src/main.c +++ b/src/main.c @@ -2594,9 +2594,9 @@ struct OutStruct { curl_off_t init; /* original size (non-zero when appending) */ }; -static int my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream) +static size_t my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream) { - int rc; + size_t rc; struct OutStruct *out=(struct OutStruct *)stream; struct Configurable *config = out->config; curl_off_t size = (curl_off_t)(sz * nmemb); /* typecast to prevent @@ -2607,7 +2607,14 @@ static int my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream) out->stream=fopen(out->filename, "wb"); if(!out->stream) { warnf(config, "Failed to create the file %s\n", out->filename); - return -1; /* failure */ + /* + * Once that libcurl has called back my_fwrite() the returned value + * is checked against the amount that was intended to be written, if + * it does not match then it fails with CURLE_WRITE_ERROR. So at this + * point returning a value different from sz*nmemb indicates failure. + */ + rc = (0 == (sz * nmemb)) ? 1 : 0; + return rc; /* failure */ } } @@ -2662,7 +2669,7 @@ static int my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream) rc = fwrite(buffer, sz, nmemb, out->stream); - if((int)(sz * nmemb) == rc) { + if((sz * nmemb) == rc) { /* we added this amount of data to the output */ out->bytes += (sz * nmemb); } @@ -2700,9 +2707,9 @@ static curlioerr my_ioctl(CURL *handle, curliocmd cmd, void *userp) return CURLIOE_OK; } -static int my_fread(void *buffer, size_t sz, size_t nmemb, void *userp) +static size_t my_fread(void *buffer, size_t sz, size_t nmemb, void *userp) { - int rc; + size_t rc; struct InStruct *in=(struct InStruct *)userp; struct Configurable *config = in->config; curl_off_t size = (curl_off_t)(sz * nmemb); /* typecast to prevent warnings @@ -2763,7 +2770,10 @@ static int my_fread(void *buffer, size_t sz, size_t nmemb, void *userp) rc = fread(buffer, sz, nmemb, in->stream); #if 0 - fprintf(stderr, "CALLBACK returning %d bytes data\n", (int)rc); + if (sizeof(rc) > sizeof(unsigned int)) + fprintf(stderr, "CALLBACK returning %lu bytes data\n", rc); + else + fprintf(stderr, "CALLBACK returning %u bytes data\n", rc); #endif return rc; } |