Skip to content

Commit

Permalink
src/tool_cb_wrt: separate fnc for output file creation
Browse files Browse the repository at this point in the history
  • Loading branch information
kdudka committed Apr 8, 2015
1 parent a9e4674 commit f251417
Showing 1 changed file with 39 additions and 32 deletions.
71 changes: 39 additions & 32 deletions src/tool_cb_wrt.c
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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");
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;
}
if(!outs->stream && !tool_create_output_file(outs))
return failure;

rc = fwrite(buffer, sz, nmemb, outs->stream);

Expand Down

0 comments on commit f251417

Please sign in to comment.