corrected return code, general cleanup

This commit is contained in:
Daniel Stenberg 2001-10-29 13:41:16 +00:00
parent c9954d1941
commit 3f248dd163
1 changed files with 52 additions and 43 deletions

View File

@ -2,13 +2,13 @@
.\" nroff -man [file] .\" nroff -man [file]
.\" $Id$ .\" $Id$
.\" .\"
.TH curl_formadd 3 "27 August 2001" "libcurl 7.9" "libcurl Manual" .TH curl_formadd 3 "29 October 2001" "libcurl 7.9.1" "libcurl Manual"
.SH NAME .SH NAME
curl_formadd - add a section to a multipart/formdata HTTP POST curl_formadd - add a section to a multipart/formdata HTTP POST
.SH SYNOPSIS .SH SYNOPSIS
.B #include <curl/curl.h> .B #include <curl/curl.h>
.sp .sp
.BI "CURLcode curl_formadd(struct HttpPost ** " firstitem, .BI "int curl_formadd(struct HttpPost ** " firstitem,
.BI "struct HttpPost ** " lastitem, " ...);" .BI "struct HttpPost ** " lastitem, " ...);"
.ad .ad
.SH DESCRIPTION .SH DESCRIPTION
@ -17,62 +17,62 @@ HTTP POST (sometimes refered to as rfc1867-style posts). Append one section at
a time until you've added all the sections you want included and then you pass a time until you've added all the sections you want included and then you pass
the \fIfirstitem\fP pointer as parameter to \fBCURLOPT_HTTPPOST\fP. the \fIfirstitem\fP pointer as parameter to \fBCURLOPT_HTTPPOST\fP.
\fIlastitem\fP is set after each call and on repeated invokes it should be \fIlastitem\fP is set after each call and on repeated invokes it should be
left as set to allow repeated invokes to find the end of the list in a faster left as set to allow repeated invokes to find the end of the list faster.
way.
After \fIlastitem\fP follow the real arguments that constitute the After the \fIlastitem\fP pointer follow the real arguments. (If the following
new section (if the following description confuses you jump directly description confuses you, jump directly to the examples):
to the examples):
CURLFORM_COPYNAME or CURLFORM_PTRNAME followed by a string is used for \fBCURLFORM_COPYNAME\fP or \fBCURLFORM_PTRNAME\fP followed by a string is used
the name of the section. Optionally one may use CURLFORM_NAMELENGTH to for the name of the section. Optionally one may use \fBCURLFORM_NAMELENGTH\fP
specify the length of the name (allowing null characters within the name). to specify the length of the name (allowing null characters within the
name). All options that use the word COPY in their names copy the given
contents, while the ones with PTR in their names simply points to the (static)
data you must make sure remain until curl no longer needs it.
The four options for providing values are: CURLFORM_COPYCONTENTS, The four options for providing values are: \fBCURLFORM_COPYCONTENTS\fP,
CURLFORM_PTRCONTENTS, CURLFORM_FILE, or CURLFORM_FILECONTENT followed \fBCURLFORM_PTRCONTENTS\fP, \fBCURLFORM_FILE\fP, or \fBCURLFORM_FILECONTENT\fP
by a char or void pointer (allowed for PTRCONTENTS). followed by a char or void pointer (allowed for PTRCONTENTS).
CURLFORM_FILECONTENT does a normal post like CURLFORM_COPYCONTENTS but \fBCURLFORM_FILECONTENT\fP does a normal post like \fBCURLFORM_COPYCONTENTS\fP
the actual value is read from the filename given as a string. but the actual value is read from the filename given as a string.
Other arguments may be CURLFORM_CONTENTTYPE if the Other arguments may be \fBCURLFORM_CONTENTTYPE\fP if the user wishes to
user wishes to specify one (for FILE if no type is given the library specify one (for FILE if no type is given the library tries to provide the
tries to provide the correct one; for CONTENTS no Content-Type is sent correct one; for CONTENTS no Content-Type is sent in this case).
in this case).
For CURLFORM_PTRCONTENTS or CURLFORM_COPYNAME the user may also add For \fBCURLFORM_PTRCONTENTS\fP or \fBCURLFORM_COPYNAME\fP the user may also
CURLFORM_CONTENTSLENGTH followed by the length as a long (if not given add \fBCURLFORM_CONTENTSLENGTH\fP followed by the length as a long (if not
the library will use strlen to determine the length). given the library will use strlen to determine the length).
For CURLFORM_FILE the user may send multiple files in one section by For \fBCURLFORM_FILE\fP the user may send multiple files in one section by
providing multiple CURLFORM_FILE arguments each followed by the filename providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
(and each FILE is allowed to have a CONTENTTYPE). (and each FILE is allowed to have a CONTENTTYPE).
Another possibility to send single or multiple files in one section is Another possibility to send single or multiple files in one section is to use
to use CURLFORM_ARRAY that gets a struct curl_forms array as its \fBCURLFORM_ARRAY\fP that gets a struct curl_forms array pointer as its
value. Each structure element has a CURLformoption and a char value. Each structure element has a CURLformoption and a char pointer. For the
pointer. For the options only CURLFORM_FILE, CURLFORM_CONTENTTYPE, and options only \fBCURLFORM_FILE\fP, \fBCURLFORM_CONTENTTYPE\fP, and
CURLFORM_END (that is used to determine the end of the array and thus \fBCURLFORM_END\fP (that is used to determine the end of the array and thus
must be the option of the last and no other element of the curl_forms must be the option of the last and no other element of the curl_forms array)
array) are allowed. The effect of this parameter is the same as giving are allowed. The effect of this parameter is the same as giving multiple
multiple CURLFORM_FILE options possibly with CURLFORM_CONTENTTYPE \fBCURLFORM_FILE\fP options possibly with \fBCURLFORM_CONTENTTYPE\fP after or
after or before each CURLFORM_FILE option. before each \fBCURLFORM_FILE\fP option.
The last argument always is CURLFORM_END. The last argument in such an array must always be \fBCURLFORM_END\fP.
The pointers \fI*firstitem\fP and \fI*lastitem\fP should both be pointing to The pointers \fI*firstitem\fP and \fI*lastitem\fP should both be pointing to
NULL in the first call to this function. All list-data will be allocated by NULL in the first call to this function. All list-data will be allocated by
the function itself. You must call \fIcurl_formfree\fP after the form post has the function itself. You must call \fIcurl_formfree\fP after the form post has
been done to free the resources again. been done to free the resources again.
This function will copy all input data except the data pointed to by This function will copy all input data except the data pointed to by the
the arguments after CURLFORM_PTRNAME and CURLFORM_PTRCONTENTS and keep arguments after \fBCURLFORM_PTRNAME\fP and \fBCURLFORM_PTRCONTENTS\fP and keep
its own version of it allocated until you call \fIcurl_formfree\fP. When its own version of it allocated until you call \fIcurl_formfree\fP. When
you've passed the pointer to \fIcurl_easy_setopt\fP, you must not free you've passed the pointer to \fIcurl_easy_setopt\fP, you must not free the
the list until after you've called \fIcurl_easy_cleanup\fP for the list until after you've called \fIcurl_easy_cleanup\fP for the curl handle. If
curl handle. If you provide a pointer as an arguments after you provide a pointer as an arguments after \fBCURLFORM_PTRNAME\fP or
CURLFORM_PTRNAME or CURLFORM_PTRCONTENTS you must ensure that the pointer \fBCURLFORM_PTRCONTENTS\fP you must ensure that the pointer stays valid until
stays valid until you call \fIcurl_form_free\fP and \fIcurl_easy_cleanup\fP. you call \fIcurl_form_free\fP and \fIcurl_easy_cleanup\fP.
See example below. See example below.
.SH RETURN VALUE .SH RETURN VALUE
@ -98,39 +98,48 @@ Returns non-zero if an error occurs.
/* Add simple name/content section */ /* Add simple name/content section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
CURLFORM_COPYCONTENTS, "content", CURLFORM_END); CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
/* Add simple name/content/contenttype section */ /* Add simple name/content/contenttype section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode", curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
CURLFORM_COPYCONTENTS, "<HTML></HTML>", CURLFORM_COPYCONTENTS, "<HTML></HTML>",
CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END); CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
/* Add name/ptrcontent section */ /* Add name/ptrcontent section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent", curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
CURLFORM_PTRCONTENTS, buffer, CURLFORM_END); CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
/* Add ptrname/ptrcontent section */ /* Add ptrname/ptrcontent section */
curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer, curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH, CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
namelength, CURLFORM_END); namelength, CURLFORM_END);
/* Add name/ptrcontent/contenttype section */ /* Add name/ptrcontent/contenttype section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole", curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
CURLFORM_PTRCONTENTS, htmlbuffer, CURLFORM_PTRCONTENTS, htmlbuffer,
CURLFORM_CONTENTSLENGTH, htmlbufferlength, CURLFORM_CONTENTSLENGTH, htmlbufferlength,
CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END); CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
/* Add simple file section */ /* Add simple file section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture", curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
CURLFORM_FILE, "my-face.jpg", CURLFORM_END); CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
/* Add file/contenttype section */ /* Add file/contenttype section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture", curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
CURLFORM_FILE, "my-face.jpg", CURLFORM_FILE, "my-face.jpg",
CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END); CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
/* Add two file section */ /* Add two file section */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures", curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
CURLFORM_FILE, "my-face.jpg", CURLFORM_FILE, "my-face.jpg",
CURLFORM_FILE, "your-face.jpg", CURLFORM_END); CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
/* Add two file section using CURLFORM_ARRAY */ /* Add two file section using CURLFORM_ARRAY */
forms[0].option = CURLFORM_FILE; forms[0].option = CURLFORM_FILE;
forms[0].value = file1; forms[0].value = file1;
forms[1].option = CURLFORM_FILE; forms[1].option = CURLFORM_FILE;
forms[1].value = file2; forms[1].value = file2;
forms[2].value = CURLFORM_END; forms[2].option = CURLFORM_END;
/* no option needed for the end marker */ /* no option needed for the end marker */
curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures", curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
CURLFORM_ARRAY, forms, CURLFORM_END); CURLFORM_ARRAY, forms, CURLFORM_END);
@ -143,7 +152,7 @@ Returns non-zero if an error occurs.
.SH "SEE ALSO" .SH "SEE ALSO"
.BR curl_easy_setopt "(3), " .BR curl_easy_setopt "(3), "
.BR curl_formparse "(3) [deprecated], " .BR curl_formparse "(3) [deprecated], "
.BR curl_formfree "(3) .BR curl_formfree "(3)"
.SH BUGS .SH BUGS
Surely there are some, you tell me! Surely there are some, you tell me!