27 #define ENABLE_CURLX_PRINTF 47 char *word_begin = NULL;
50 const char *end_chars =
";,";
58 if(ptr[1] ==
'\\' || ptr[1] ==
'"') {
73 if(*ptr ==
'\\' && (ptr[1] ==
'\\' || ptr[1] ==
'"'))
77 while(ptr < *end_pos);
80 while(*ptr && NULL == strchr(end_chars, *ptr))
83 return word_begin + 1;
91 while(*ptr && NULL == strchr(end_chars, *ptr))
93 *str = *end_pos =
ptr;
111 const char *filename, FILE *fp,
117 bool incomment =
FALSE;
123 if(c == EOF || (!pos && !
ISSPACE(c))) {
125 while(hdrlen &&
ISSPACE(hdrbuf[hdrlen - 1]))
128 hdrbuf[hdrlen] =
'\0';
131 "Out of memory for field headers!\n");
142 "Header file %s read error: %s\n", filename, strerror(errno));
161 if(hdrlen ==
sizeof hdrbuf - 1) {
162 warnf(config->
global,
"File %s line %d: header too long (truncated)\n",
166 if(hdrlen <=
sizeof hdrbuf - 1)
167 hdrbuf[hdrlen++] = (char) c;
174 char **pdata,
char **ptype,
char **pfilename,
175 char **pencoder,
struct curl_slist **pheaders)
180 char *encoder = NULL;
184 char type_major[128] =
"";
185 char type_minor[128] =
"";
203 while(endpos > *pdata &&
ISSPACE(endpos[-1]))
218 if(2 != sscanf(type,
"%127[^/ ]/%127[^;, \n]", type_major, type_minor)) {
219 warnf(config->
global,
"Illegally formatted content-type field!\n");
225 endpos = type + strlen(type_major) + strlen(type_minor) + 1;
226 for(p = endpos;
ISSPACE(*p); p++)
228 while(*p && *p !=
';' && *p !=
',')
244 while(endpos > filename &&
ISSPACE(endpos[-1]))
255 if(*p ==
'@' || *p ==
'<') {
267 while(endpos > hdrfile &&
ISSPACE(endpos[-1]))
274 warnf(config->
global,
"Cannot read from %s: %s\n", hdrfile,
295 while(endpos > hdr &&
ISSPACE(endpos[-1]))
317 while(endpos > encoder &&
ISSPACE(endpos[-1]))
332 warnf(config->
global,
"skip unknown form field: %s\n", unknown);
340 endct = type + strlen(type);
341 while(endct > type &&
ISSPACE(endct[-1]))
349 warnf(config->
global,
"Field content type not allowed here: %s\n", type);
352 *pfilename = filename;
355 "Field file name not allowed here: %s\n", filename);
361 "Field encoder not allowed here: %s\n", encoder);
367 "Field headers not allowed here: %s\n", headers->
data);
380 if(strcmp(file,
"-"))
444 char *contents = NULL;
449 char *encoder = NULL;
462 *mimecurrent = *mimepost;
473 contp = strchr(contents,
'=');
479 if(*contp ==
'(' && !literal_value) {
483 sep =
get_param_part(config, &contp, &data, &type, NULL, NULL, &headers);
497 warnf(config->
global,
"curl_mime_addpart failed!\n");
504 warnf(config->
global,
"curl_mime_subparts failed!\n");
510 *mimecurrent = subparts;
512 warnf(config->
global,
"curl_mime_headers failed!\n");
523 else if(!name && !strcmp(contp,
")") && !literal_value) {
525 if(*mimecurrent == *mimepost) {
526 warnf(config->
global,
"no multipart to terminate!\n");
532 else if(
'@' == contp[0] && !literal_value) {
543 &data, &type, &filename, &encoder, &headers);
545 if(subparts != *mimecurrent)
555 subparts = *mimecurrent;
570 warnf(config->
global,
"curl_mime_addpart failed!\n");
571 if(subparts != *mimecurrent)
580 warnf(config->
global,
"curl_mime_headers failed!\n");
581 if(subparts != *mimecurrent)
591 warnf(config->
global,
"setting file %s failed!\n", data);
593 if(subparts != *mimecurrent)
600 warnf(config->
global,
"curl_mime_filename failed!\n");
601 if(subparts != *mimecurrent)
608 if(subparts != *mimecurrent)
614 warnf(config->
global,
"curl_mime_encoder failed!\n");
615 if(subparts != *mimecurrent)
625 if(subparts != *mimecurrent) {
628 warnf(config->
global,
"curl_mime_addpart failed!\n");
634 warnf(config->
global,
"curl_mime_subparts failed!\n");
645 warnf(config->
global,
"curl_mime_addpart failed!\n");
650 if(*contp ==
'<' && !literal_value) {
653 &data, &type, &filename, &encoder, &headers);
661 warnf(config->
global,
"curl_mime_headers failed!\n");
670 warnf(config->
global,
"setting file %s failed!\n", data);
682 &data, &type, &filename, &encoder, &headers);
691 warnf(config->
global,
"curl_mime_headers failed!\n");
697 #ifdef CURL_DOES_CONVERSIONS 698 if(convert_to_network(data, strlen(data))) {
713 warnf(config->
global,
"curl_mime_filename failed!\n");
723 warnf(config->
global,
"curl_mime_encoder failed!\n");
731 "garbage at end of field specification: %s\n", contp);
743 warnf(config->
global,
"Illegally formatted input field!\n");
CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, const char *filename)
CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, struct curl_slist *headers, int take_ownership)
CURL_EXTERN void curl_mime_free(curl_mime *mime)
CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, const char *data, size_t datasize)
UNITTEST_START char * ptr
CURL_EXTERN curl_mime * curl_mime_init(CURL *easy)
struct GlobalConfig * global
int(* curl_seek_callback)(void *instream, curl_off_t offset, int origin)
CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, const char *encoding)
CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name)
CURL_EXTERN struct curl_slist * curl_slist_append(struct curl_slist *, const char *)
UNITTEST_START struct Curl_easy data
size_t(* curl_read_callback)(char *buffer, size_t size, size_t nitems, void *instream)
#define Curl_safefree(ptr)
CURL_EXTERN curl_mimepart * curl_mime_addpart(curl_mime *mime)
CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, const char *filename)
CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype)
#define checkprefix(a, b)
#define CURL_ZERO_TERMINATED
CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, curl_off_t datasize, curl_read_callback readfunc, curl_seek_callback seekfunc, curl_free_callback freefunc, void *arg)
CURL_EXTERN void curl_slist_free_all(struct curl_slist *)
CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, curl_mime *subparts)