1
0
mirror of https://github.com/moparisthebest/curl synced 2024-11-15 22:15:13 -05:00

src/tool_cb_wrt: separate fnc for output file creation

This commit is contained in:
Kamil Dudka 2015-03-30 13:45:22 +02:00
parent a9e46749b2
commit f251417d85

View File

@ -31,6 +31,43 @@
#include "memdebug.h" /* keep this as LAST include */ #include "memdebug.h" /* keep this as LAST include */
/* create a local file for writing, return TRUE on success */
bool tool_create_output_file(struct OutStruct *outs)
{
struct GlobalConfig *global = outs->config->global;
FILE *file;
if(!outs->filename || !*outs->filename) {
warnf(global, "Remote filename has no length!\n");
return FALSE;
}
if(outs->is_cd_filename) {
/* don't overwrite existing files */
file = fopen(outs->filename, "rb");
if(file) {
fclose(file);
warnf(global, "Refusing to overwrite %s: %s\n", outs->filename,
strerror(EEXIST));
return FALSE;
}
}
/* open file for writing */
file = fopen(outs->filename, "wb");
if(!file) {
warnf(global, "Failed to create the file %s: %s\n", outs->filename,
strerror(errno));
return FALSE;
}
outs->s_isreg = TRUE;
outs->fopened = TRUE;
outs->stream = file;
outs->bytes = 0;
outs->init = 0;
return TRUE;
}
/* /*
** callback for CURLOPT_WRITEFUNCTION ** callback for CURLOPT_WRITEFUNCTION
*/ */
@ -97,38 +134,8 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
} }
#endif #endif
if(!outs->stream) { if(!outs->stream && !tool_create_output_file(outs))
FILE *file;
if(!outs->filename || !*outs->filename) {
warnf(config->global, "Remote filename has no length!\n");
return failure; return failure;
}
if(outs->is_cd_filename) {
/* don't overwrite existing files */
file = fopen(outs->filename, "rb");
if(file) {
fclose(file);
warnf(config->global, "Refusing to overwrite %s: %s\n", outs->filename,
strerror(EEXIST));
return failure;
}
}
/* open file for writing */
file = fopen(outs->filename, "wb");
if(!file) {
warnf(config->global, "Failed to create the file %s: %s\n",
outs->filename, strerror(errno));
return failure;
}
outs->s_isreg = TRUE;
outs->fopened = TRUE;
outs->stream = file;
outs->bytes = 0;
outs->init = 0;
}
rc = fwrite(buffer, sz, nmemb, outs->stream); rc = fwrite(buffer, sz, nmemb, outs->stream);