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
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 */
}
}
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);
}
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
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;
}