mirror of
https://github.com/curl/curl.git
synced 2026-08-25 16:03:40 +03:00
mime: simplify Curl_mime_prepare_headers
Make add_content_disposition() a sub function for that single purpose. Closes #21490
This commit is contained in:
parent
6f26ecb734
commit
f69ba0408e
1 changed files with 50 additions and 36 deletions
86
lib/mime.c
86
lib/mime.c
|
|
@ -1692,6 +1692,52 @@ static bool content_type_match(const char *contenttype,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static CURLcode add_content_disposition(struct Curl_easy *data,
|
||||
curl_mimepart *part,
|
||||
const char *disposition,
|
||||
const char *contenttype,
|
||||
enum mimestrategy strategy)
|
||||
{
|
||||
if(!disposition)
|
||||
if(part->filename || part->name ||
|
||||
(contenttype && !curl_strnequal(contenttype, "multipart/", 10)))
|
||||
disposition = DISPOSITION_DEFAULT;
|
||||
if(disposition && curl_strequal(disposition, "attachment") &&
|
||||
!part->name && !part->filename)
|
||||
disposition = NULL;
|
||||
if(disposition) {
|
||||
CURLcode result = CURLE_OK;
|
||||
char *name = NULL;
|
||||
char *filename = NULL;
|
||||
|
||||
if(part->name) {
|
||||
name = escape_string(data, part->name, strategy);
|
||||
if(!name)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
if(part->filename) {
|
||||
filename = escape_string(data, part->filename, strategy);
|
||||
if(!filename)
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
if(!result)
|
||||
result = Curl_mime_add_header(&part->curlheaders,
|
||||
"Content-Disposition: %s%s%s%s%s%s%s",
|
||||
disposition,
|
||||
name ? "; name=\"" : "",
|
||||
name ? name : "",
|
||||
name ? "\"" : "",
|
||||
filename ? "; filename=\"" : "",
|
||||
filename ? filename : "",
|
||||
filename ? "\"" : "");
|
||||
curlx_safefree(name);
|
||||
curlx_safefree(filename);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
CURLcode Curl_mime_prepare_headers(struct Curl_easy *data,
|
||||
curl_mimepart *part,
|
||||
const char *contenttype,
|
||||
|
|
@ -1750,42 +1796,10 @@ CURLcode Curl_mime_prepare_headers(struct Curl_easy *data,
|
|||
|
||||
/* Issue content-disposition header only if not already set by caller. */
|
||||
if(!search_header(part->userheaders, STRCONST("Content-Disposition"))) {
|
||||
if(!disposition)
|
||||
if(part->filename || part->name ||
|
||||
(contenttype && !curl_strnequal(contenttype, "multipart/", 10)))
|
||||
disposition = DISPOSITION_DEFAULT;
|
||||
if(disposition && curl_strequal(disposition, "attachment") &&
|
||||
!part->name && !part->filename)
|
||||
disposition = NULL;
|
||||
if(disposition) {
|
||||
char *name = NULL;
|
||||
char *filename = NULL;
|
||||
|
||||
if(part->name) {
|
||||
name = escape_string(data, part->name, strategy);
|
||||
if(!name)
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
if(!result && part->filename) {
|
||||
filename = escape_string(data, part->filename, strategy);
|
||||
if(!filename)
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
if(!result)
|
||||
result = Curl_mime_add_header(&part->curlheaders,
|
||||
"Content-Disposition: %s%s%s%s%s%s%s",
|
||||
disposition,
|
||||
name ? "; name=\"" : "",
|
||||
name ? name : "",
|
||||
name ? "\"" : "",
|
||||
filename ? "; filename=\"" : "",
|
||||
filename ? filename : "",
|
||||
filename ? "\"" : "");
|
||||
curlx_safefree(name);
|
||||
curlx_safefree(filename);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
result = add_content_disposition(data, part, disposition,
|
||||
contenttype, strategy);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Issue Content-Type header. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue