aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-06-13 22:05:13 +0200
committerDaniel Stenberg <daniel@haxx.se>2011-06-13 22:05:13 +0200
commit85881f9f35832dbd4ef28940267f8fa30cbb867e (patch)
tree3721e318c7f167667b480b35db943f801f92f5bc
parent84e13f2e07121e09a1a4b607f0f887b20296ec5f (diff)
curl_formget: treat CURLFORM_STREAM better
If a piece is set to use a callback to get the data, it should not be treated as data. It unfortunately also requires that curl_easy_perform() or similar has been used as otherwise the callback function hasn't been figured out and curl_formget won't know how to get the content.
-rw-r--r--lib/formdata.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/formdata.c b/lib/formdata.c
index df4094c33..49e795453 100644
--- a/lib/formdata.c
+++ b/lib/formdata.c
@@ -875,7 +875,7 @@ int curl_formget(struct curl_httppost *form, void *arg,
return (int)rc;
for(ptr = data; ptr; ptr = ptr->next) {
- if(ptr->type == FORM_FILE) {
+ if((ptr->type == FORM_FILE) || (ptr->type == FORM_CALLBACK)) {
char buffer[8192];
size_t nread;
struct Form temp;
@@ -1301,8 +1301,12 @@ static size_t readfromfile(struct Form *form, char *buffer,
size_t nread;
bool callback = (bool)(form->data->type == FORM_CALLBACK);
- if(callback)
- nread = form->fread_func(buffer, 1, size, form->data->line);
+ if(callback) {
+ if(form->fread_func == ZERO_NULL)
+ return 0;
+ else
+ nread = form->fread_func(buffer, 1, size, form->data->line);
+ }
else {
if(!form->fp) {
/* this file hasn't yet been opened */