← Commit list

8b6b0d9ee7

Viktor Szakats
Viktor Szakats
2026-07-01
SUCCESS Duration: 194s

Subject

tool_cb_hdr: de-duplicate filename setter

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

src/tool_cb_hdr.c+28 -41
@@ -282,6 +282,32 @@ static size_t save_etag(const char *etag_h, const char *endp,
return 0; /* ok */
}
+static bool set_filename(struct OutStruct *outs,
+ struct per_transfer *per, char *filename)
+{
+ if(outs->stream) {
+ /* indication of problem, get out! */
+ curlx_free(filename);
+ return FALSE;
+ }
+ if(outs->alloc_filename)
+ curlx_safefree(outs->filename);
+
+ if(per->config->output_dir) {
+ char *f = curl_maprintf("%s/%s", per->config->output_dir, filename);
+ curlx_free(filename);
+ if(!f)
+ return FALSE;
+ outs->filename = curlx_strdup(f);
+ curl_free(f);
+ if(!outs->filename)
+ return FALSE;
+ }
+ else
+ outs->filename = filename;
+ return TRUE;
+}
+
/*
* This function sets the filename where output shall be written when curl
* options --remote-name (-O) and --remote-header-name (-J) have been
@@ -303,27 +329,8 @@ static size_t content_disposition(const char *str, const char *end,
if(p < end) { /* as a precaution */
char *filename = parse_filename(p, cb - (p - str), 0);
if(filename) {
- if(outs->stream) {
- /* indication of problem, get out! */
- curlx_free(filename);
+ if(!set_filename(outs, per, filename))
return CURL_WRITEFUNC_ERROR;
- }
- if(outs->alloc_filename)
- curlx_safefree(outs->filename);
-
- if(per->config->output_dir) {
- char *f = curl_maprintf("%s/%s", per->config->output_dir,
- filename);
- curlx_free(filename);
- if(!f)
- return CURL_WRITEFUNC_ERROR;
- outs->filename = curlx_strdup(f);
- curl_free(f);
- if(!outs->filename)
- return CURL_WRITEFUNC_ERROR;
- }
- else
- outs->filename = filename;
outs->alloc_filename = TRUE;
outs->is_cd_filename = TRUE; /* set to avoid clobbering existing files
by default */
@@ -358,28 +365,8 @@ static size_t content_disposition(const char *str, const char *end,
len = cb - (size_t)(p - str);
filename = parse_filename(p, len, ';');
if(filename) {
- if(outs->stream) {
- /* indication of problem, get out! */
- curlx_free(filename);
+ if(!set_filename(outs, per, filename))
return CURL_WRITEFUNC_ERROR;
- }
- if(outs->alloc_filename)
- curlx_safefree(outs->filename);
-
- if(per->config->output_dir) {
- char *f = curl_maprintf("%s/%s", per->config->output_dir,
- filename);
- curlx_free(filename);
- if(!f)
- return CURL_WRITEFUNC_ERROR;
- outs->filename = curlx_strdup(f);
- curl_free(f);
- if(!outs->filename)
- return CURL_WRITEFUNC_ERROR;
- }
- else
- outs->filename = filename;
-
outs->is_cd_filename = TRUE;
outs->regular_file = TRUE;
outs->fopened = FALSE;