Commit f251417d authored by Kamil Dudka's avatar Kamil Dudka
Browse files

src/tool_cb_wrt: separate fnc for output file creation

parent a9e46749
Loading
Loading
Loading
Loading
+39 −32
Original line number Diff line number Diff line
@@ -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");
      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));
  if(!outs->stream && !tool_create_output_file(outs))
    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);