diff -urp c:\f\curl-old/curl/src/main.c c:\f\curl-new/curl/src/main.c
--- c:\f\curl-old/curl/src/main.c	2005-12-05 15:10:48.000000000 +0100
+++ c:\f\curl-new/curl/src/main.c	2005-12-07 22:01:58.921875000 +0100
@@ -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_
     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 = ((sz * nmemb) != 0) ? 0 : 1 ;
+      return rc;
     }
   }
 
@@ -2662,7 +2669,7 @@ static int my_fwrite(void *buffer, size_
 
   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, 
   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,7 @@ static int my_fread(void *buffer, size_t
 
   rc = fread(buffer, sz, nmemb, in->stream);
 #if 0
-  fprintf(stderr, "CALLBACK returning %d bytes data\n", (int)rc);
+  fprintf(stderr, "CALLBACK returning %d bytes data\n", rc);
 #endif
   return rc;
 }

