diff options
author | Daniel Stenberg <daniel@haxx.se> | 2011-06-13 22:05:13 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-06-13 22:05:13 +0200 |
commit | 85881f9f35832dbd4ef28940267f8fa30cbb867e (patch) | |
tree | 3721e318c7f167667b480b35db943f801f92f5bc /lib | |
parent | 84e13f2e07121e09a1a4b607f0f887b20296ec5f (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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/formdata.c | 10 |
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 */ |