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 */
/* 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
*/
@ -97,38 +134,8 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
}
#endif
if(!outs->stream) {
FILE *file;
if(!outs->filename || !*outs->filename) {
warnf(config->global, "Remote filename has no length!\n");
if(!outs->stream && !tool_create_output_file(outs))
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);