Index: formdata.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/formdata.c,v
retrieving revision 1.36
diff -u -r1.36 formdata.c
--- formdata.c	3 Apr 2002 11:11:01 -0000	1.36
+++ formdata.c	15 Apr 2002 11:10:32 -0000
@@ -1044,22 +1044,24 @@
   } while((form=next)); /* continue */
 }
 
-struct FormData *Curl_getFormData(struct curl_httppost *post,
-                                  int *sizep)
+CURLcode Curl_getFormData(struct FormData **finalform,
+                          struct curl_httppost *post,
+                          int *sizep)
 {
   struct FormData *form = NULL;
   struct FormData *firstform;
-
   struct curl_httppost *file;
+  CURLcode result = CURLE_OK;
 
   int size =0;
   char *boundary;
   char *fileboundary=NULL;
   struct curl_slist* curList;
 
+  *finalform=NULL; /* default form is empty */
 
   if(!post)
-    return NULL; /* no input => no output! */
+    return result; /* no input => no output! */
 
   boundary = Curl_FormBoundary();
   
@@ -1166,20 +1168,24 @@
 /*VMS?? Stream files are OK, as are FIXED & VAR files WITHOUT implied CC */
 /*VMS?? For implied CC, every record needs to have a \n appended & 1 added to SIZE */
 	if(fileread) {
-	  while((nread = fread(buffer, 1, 1024, fileread))) {
-	    size += AddFormData(&form,
-				buffer,
-				nread);
-	  }
+	  while((nread = fread(buffer, 1, 1024, fileread)))
+	    size += AddFormData(&form, buffer, nread);
+
           if(fileread != stdin)
             fclose(fileread);
 	}
         else {
+#if 0
           /* File wasn't found, add a nothing field! */
 	  size += AddFormData(&form, "", 0);
+#endif
+          Curl_formclean(firstform);
+          free(boundary);
+          *finalform = NULL;
+          return CURLE_READ_ERROR;
 	}
       }
- else {
+      else {
 	/* include the contents we got */
 	size += AddFormData(&form, post->contents, post->contentslength);
       }
@@ -1205,7 +1211,9 @@
 
   free(boundary);
 
-  return firstform;
+  *finalform=firstform;
+
+  return result;
 }
 
 int Curl_FormInit(struct Form *form, struct FormData *formdata )
Index: formdata.h
===================================================================
RCS file: /cvsroot/curl/curl/lib/formdata.h,v
retrieving revision 1.11
diff -u -r1.11 formdata.h
--- formdata.h	19 Mar 2002 07:54:55 -0000	1.11
+++ formdata.h	15 Apr 2002 11:10:32 -0000
@@ -53,8 +53,10 @@
 
 int Curl_FormInit(struct Form *form, struct FormData *formdata );
 
-struct FormData *Curl_getFormData(struct HttpPost *post,
-                                  int *size);
+CURLcode
+Curl_getFormData(struct FormData **,
+                 struct HttpPost *post,
+                 int *size);
 
 /* fread() emulation */
 int Curl_FormReader(char *buffer,
Index: http.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/http.c,v
retrieving revision 1.95
diff -u -r1.95 http.c
--- http.c	12 Apr 2002 07:53:12 -0000	1.95
+++ http.c	15 Apr 2002 11:10:32 -0000
@@ -562,7 +562,13 @@
   if(HTTPREQ_POST_FORM == data->set.httpreq) {
     /* we must build the whole darned post sequence first, so that we have
        a size of the whole shebang before we start to send it */
-    http->sendit = Curl_getFormData(data->set.httppost, &http->postsize);
+     result = Curl_getFormData(&http->sendit, data->set.httppost,
+                               &http->postsize);
+     if(CURLE_OK != result) {
+       /* Curl_getFormData() doesn't use failf() */
+       failf(data, "failed creating formpost data");
+       return result;
+     }
   }
 
   if(!checkheaders(data, "Host:")) {
