Loading include/curl/curl.h +29 −1 Original line number Diff line number Diff line Loading @@ -656,7 +656,35 @@ struct curl_forms { }; /* use this for multipart formpost building */ int curl_formadd(struct curl_httppost **httppost, /* Returns code for curl_formadd() * * Returns: * CURL_FORMADD_OK on success * CURL_FORMADD_MEMORY if the FormInfo allocation fails * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form * CURL_FORMADD_NULL if a null pointer was given for a char * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated * CURL_FORMADD_MEMORY if some allocation for string copying failed. * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * ***************************************************************************/ typedef enum { CURL_FORMADD_OK, /* first, no error */ CURL_FORMADD_MEMORY, CURL_FORMADD_OPTION_TWICE, CURL_FORMADD_NULL, CURL_FORMADD_UNKNOWN_OPTION, CURL_FORMADD_INCOMPLETE, CURL_FORMADD_ILLEGAL_ARRAY, CURL_FORMADD_LAST /* last */ } CURLFORMcode; CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...); Loading lib/formdata.c +44 −57 Original line number Diff line number Diff line Loading @@ -602,39 +602,26 @@ static int AllocAndCopy (char **buffer, int buffer_length) * CURLFORM_FILE, "filename1", CURLFORM_FILE, "filename2", CURLFORM_END); * * Returns: * FORMADD_OK on success * FORMADD_MEMORY if the FormInfo allocation fails * FORMADD_OPTION_TWICE if one option is given twice for one Form * FORMADD_NULL if a null pointer was given for a char * FORMADD_MEMORY if the allocation of a FormInfo struct failed * FORMADD_UNKNOWN_OPTION if an unknown option was used * FORMADD_INCOMPLETE if the some FormInfo is not complete (or an error) * FORMADD_MEMORY if a HttpPost struct cannot be allocated * FORMADD_MEMORY if some allocation for string copying failed. * FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * CURL_FORMADD_OK on success * CURL_FORMADD_MEMORY if the FormInfo allocation fails * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form * CURL_FORMADD_NULL if a null pointer was given for a char * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or an error) * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated * CURL_FORMADD_MEMORY if some allocation for string copying failed. * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * ***************************************************************************/ typedef enum { FORMADD_OK, /* first, no error */ FORMADD_MEMORY, FORMADD_OPTION_TWICE, FORMADD_NULL, FORMADD_UNKNOWN_OPTION, FORMADD_INCOMPLETE, FORMADD_ILLEGAL_ARRAY, FORMADD_LAST /* last */ } FORMcode; static FORMcode FormAdd(struct curl_httppost **httppost, CURLFORMcode FormAdd(struct curl_httppost **httppost, struct curl_httppost **last_post, va_list params) { FormInfo *first_form, *current_form, *form; FORMcode return_value = FORMADD_OK; CURLFORMcode return_value = CURL_FORMADD_OK; const char *prevtype = NULL; struct curl_httppost *post = NULL; CURLformoption option; Loading @@ -655,7 +642,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form = first_form; } else return FORMADD_MEMORY; return CURL_FORMADD_MEMORY; /* * Loop through all the options set. Loading @@ -663,7 +650,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, while (1) { /* break if we have an error to report */ if (return_value != FORMADD_OK) if (return_value != CURL_FORMADD_OK) break; /* first see if we have more parts of the array param */ Loading @@ -690,13 +677,13 @@ FORMcode FormAdd(struct curl_httppost **httppost, case CURLFORM_ARRAY: if(array_state) /* we don't support an array from within an array */ return_value = FORMADD_ILLEGAL_ARRAY; return_value = CURL_FORMADD_ILLEGAL_ARRAY; else { forms = va_arg(params, struct curl_forms *); if (forms) array_state = TRUE; else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; Loading @@ -707,19 +694,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form->flags |= HTTPPOST_PTRNAME; /* fall through */ case CURLFORM_COPYNAME: if (current_form->name) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else { char *name = array_state? array_value:va_arg(params, char *); if (name) current_form->name = name; /* store for the moment */ else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; case CURLFORM_NAMELENGTH: if (current_form->namelength) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->namelength = array_state?(long)array_value:va_arg(params, long); Loading @@ -732,19 +719,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form->flags |= HTTPPOST_PTRCONTENTS; /* fall through */ case CURLFORM_COPYCONTENTS: if (current_form->value) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else { char *value = array_state?array_value:va_arg(params, char *); if (value) current_form->value = value; /* store for the moment */ else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; case CURLFORM_CONTENTSLENGTH: if (current_form->contentslength) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->contentslength = array_state?(long)array_value:va_arg(params, long); Loading @@ -753,7 +740,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, /* Get contents from a given file name */ case CURLFORM_FILECONTENT: if (current_form->flags != 0) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else { char *filename = array_state? array_value:va_arg(params, char *); Loading @@ -762,7 +749,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form->flags |= HTTPPOST_READFILE; } else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; Loading @@ -777,19 +764,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, if (filename) { if (!(current_form = AddFormInfo(strdup(filename), NULL, current_form))) return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; } else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } else return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) current_form->value = strdup(filename); else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_FILENAME; } break; Loading @@ -804,19 +791,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, if (!(current_form = AddFormInfo(NULL, strdup(contenttype), current_form))) return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; } else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } else return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; } else { if (contenttype) current_form->contenttype = strdup(contenttype); else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; } Loading @@ -829,7 +816,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, va_arg(params, struct curl_slist*); if( current_form->contentheader ) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->contentheader = list; Loading @@ -840,17 +827,17 @@ FORMcode FormAdd(struct curl_httppost **httppost, char *filename = array_state?array_value: va_arg(params, char *); if( current_form->showfilename ) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->showfilename = strdup(filename); break; } default: return_value = FORMADD_UNKNOWN_OPTION; return_value = CURL_FORMADD_UNKNOWN_OPTION; } } if(FORMADD_OK == return_value) { if(CURL_FORMADD_OK == return_value) { /* go through the list, check for copleteness and if everything is * alright add the HttpPost item otherwise set return_value accordingly */ Loading @@ -866,7 +853,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, ( (form->flags & HTTPPOST_READFILE) && (form->flags & HTTPPOST_PTRCONTENTS) ) ) { return_value = FORMADD_INCOMPLETE; return_value = CURL_FORMADD_INCOMPLETE; break; } else { Loading @@ -880,7 +867,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, (form == first_form) ) { /* copy name (without strdup; possibly contains null characters) */ if (AllocAndCopy(&form->name, form->namelength)) { return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; break; } } Loading @@ -889,7 +876,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, !(form->flags & HTTPPOST_PTRCONTENTS) ) { /* copy value (without strdup; possibly contains null characters) */ if (AllocAndCopy(&form->value, form->contentslength)) { return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; break; } } Loading @@ -901,7 +888,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, last_post); if(!post) return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; if (form->contenttype) prevtype = form->contenttype; Loading @@ -922,12 +909,12 @@ FORMcode FormAdd(struct curl_httppost **httppost, return return_value; } int curl_formadd(struct curl_httppost **httppost, CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...) { va_list arg; int result; CURLFORMcode result; va_start(arg, last_post); result = FormAdd(httppost, last_post, arg); va_end(arg); Loading Loading
include/curl/curl.h +29 −1 Original line number Diff line number Diff line Loading @@ -656,7 +656,35 @@ struct curl_forms { }; /* use this for multipart formpost building */ int curl_formadd(struct curl_httppost **httppost, /* Returns code for curl_formadd() * * Returns: * CURL_FORMADD_OK on success * CURL_FORMADD_MEMORY if the FormInfo allocation fails * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form * CURL_FORMADD_NULL if a null pointer was given for a char * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated * CURL_FORMADD_MEMORY if some allocation for string copying failed. * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * ***************************************************************************/ typedef enum { CURL_FORMADD_OK, /* first, no error */ CURL_FORMADD_MEMORY, CURL_FORMADD_OPTION_TWICE, CURL_FORMADD_NULL, CURL_FORMADD_UNKNOWN_OPTION, CURL_FORMADD_INCOMPLETE, CURL_FORMADD_ILLEGAL_ARRAY, CURL_FORMADD_LAST /* last */ } CURLFORMcode; CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...); Loading
lib/formdata.c +44 −57 Original line number Diff line number Diff line Loading @@ -602,39 +602,26 @@ static int AllocAndCopy (char **buffer, int buffer_length) * CURLFORM_FILE, "filename1", CURLFORM_FILE, "filename2", CURLFORM_END); * * Returns: * FORMADD_OK on success * FORMADD_MEMORY if the FormInfo allocation fails * FORMADD_OPTION_TWICE if one option is given twice for one Form * FORMADD_NULL if a null pointer was given for a char * FORMADD_MEMORY if the allocation of a FormInfo struct failed * FORMADD_UNKNOWN_OPTION if an unknown option was used * FORMADD_INCOMPLETE if the some FormInfo is not complete (or an error) * FORMADD_MEMORY if a HttpPost struct cannot be allocated * FORMADD_MEMORY if some allocation for string copying failed. * FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * CURL_FORMADD_OK on success * CURL_FORMADD_MEMORY if the FormInfo allocation fails * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form * CURL_FORMADD_NULL if a null pointer was given for a char * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or an error) * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated * CURL_FORMADD_MEMORY if some allocation for string copying failed. * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * ***************************************************************************/ typedef enum { FORMADD_OK, /* first, no error */ FORMADD_MEMORY, FORMADD_OPTION_TWICE, FORMADD_NULL, FORMADD_UNKNOWN_OPTION, FORMADD_INCOMPLETE, FORMADD_ILLEGAL_ARRAY, FORMADD_LAST /* last */ } FORMcode; static FORMcode FormAdd(struct curl_httppost **httppost, CURLFORMcode FormAdd(struct curl_httppost **httppost, struct curl_httppost **last_post, va_list params) { FormInfo *first_form, *current_form, *form; FORMcode return_value = FORMADD_OK; CURLFORMcode return_value = CURL_FORMADD_OK; const char *prevtype = NULL; struct curl_httppost *post = NULL; CURLformoption option; Loading @@ -655,7 +642,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form = first_form; } else return FORMADD_MEMORY; return CURL_FORMADD_MEMORY; /* * Loop through all the options set. Loading @@ -663,7 +650,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, while (1) { /* break if we have an error to report */ if (return_value != FORMADD_OK) if (return_value != CURL_FORMADD_OK) break; /* first see if we have more parts of the array param */ Loading @@ -690,13 +677,13 @@ FORMcode FormAdd(struct curl_httppost **httppost, case CURLFORM_ARRAY: if(array_state) /* we don't support an array from within an array */ return_value = FORMADD_ILLEGAL_ARRAY; return_value = CURL_FORMADD_ILLEGAL_ARRAY; else { forms = va_arg(params, struct curl_forms *); if (forms) array_state = TRUE; else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; Loading @@ -707,19 +694,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form->flags |= HTTPPOST_PTRNAME; /* fall through */ case CURLFORM_COPYNAME: if (current_form->name) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else { char *name = array_state? array_value:va_arg(params, char *); if (name) current_form->name = name; /* store for the moment */ else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; case CURLFORM_NAMELENGTH: if (current_form->namelength) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->namelength = array_state?(long)array_value:va_arg(params, long); Loading @@ -732,19 +719,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form->flags |= HTTPPOST_PTRCONTENTS; /* fall through */ case CURLFORM_COPYCONTENTS: if (current_form->value) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else { char *value = array_state?array_value:va_arg(params, char *); if (value) current_form->value = value; /* store for the moment */ else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; case CURLFORM_CONTENTSLENGTH: if (current_form->contentslength) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->contentslength = array_state?(long)array_value:va_arg(params, long); Loading @@ -753,7 +740,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, /* Get contents from a given file name */ case CURLFORM_FILECONTENT: if (current_form->flags != 0) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else { char *filename = array_state? array_value:va_arg(params, char *); Loading @@ -762,7 +749,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, current_form->flags |= HTTPPOST_READFILE; } else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; Loading @@ -777,19 +764,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, if (filename) { if (!(current_form = AddFormInfo(strdup(filename), NULL, current_form))) return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; } else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } else return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) current_form->value = strdup(filename); else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_FILENAME; } break; Loading @@ -804,19 +791,19 @@ FORMcode FormAdd(struct curl_httppost **httppost, if (!(current_form = AddFormInfo(NULL, strdup(contenttype), current_form))) return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; } else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } else return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; } else { if (contenttype) current_form->contenttype = strdup(contenttype); else return_value = FORMADD_NULL; return_value = CURL_FORMADD_NULL; } break; } Loading @@ -829,7 +816,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, va_arg(params, struct curl_slist*); if( current_form->contentheader ) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->contentheader = list; Loading @@ -840,17 +827,17 @@ FORMcode FormAdd(struct curl_httppost **httppost, char *filename = array_state?array_value: va_arg(params, char *); if( current_form->showfilename ) return_value = FORMADD_OPTION_TWICE; return_value = CURL_FORMADD_OPTION_TWICE; else current_form->showfilename = strdup(filename); break; } default: return_value = FORMADD_UNKNOWN_OPTION; return_value = CURL_FORMADD_UNKNOWN_OPTION; } } if(FORMADD_OK == return_value) { if(CURL_FORMADD_OK == return_value) { /* go through the list, check for copleteness and if everything is * alright add the HttpPost item otherwise set return_value accordingly */ Loading @@ -866,7 +853,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, ( (form->flags & HTTPPOST_READFILE) && (form->flags & HTTPPOST_PTRCONTENTS) ) ) { return_value = FORMADD_INCOMPLETE; return_value = CURL_FORMADD_INCOMPLETE; break; } else { Loading @@ -880,7 +867,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, (form == first_form) ) { /* copy name (without strdup; possibly contains null characters) */ if (AllocAndCopy(&form->name, form->namelength)) { return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; break; } } Loading @@ -889,7 +876,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, !(form->flags & HTTPPOST_PTRCONTENTS) ) { /* copy value (without strdup; possibly contains null characters) */ if (AllocAndCopy(&form->value, form->contentslength)) { return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; break; } } Loading @@ -901,7 +888,7 @@ FORMcode FormAdd(struct curl_httppost **httppost, last_post); if(!post) return_value = FORMADD_MEMORY; return_value = CURL_FORMADD_MEMORY; if (form->contenttype) prevtype = form->contenttype; Loading @@ -922,12 +909,12 @@ FORMcode FormAdd(struct curl_httppost **httppost, return return_value; } int curl_formadd(struct curl_httppost **httppost, CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...) { va_list arg; int result; CURLFORMcode result; va_start(arg, last_post); result = FormAdd(httppost, last_post, arg); va_end(arg); Loading