Unverified Commit 48492671 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

curl -J: do not append to the destination file

Reported-by: Kamil Dudka
Fixes #3380
Closes #3381
parent f0976692
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -157,12 +157,12 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
        outs->filename = filename;
        outs->alloc_filename = TRUE;
        hdrcbdata->honor_cd_filename = FALSE; /* done now! */
        if(!tool_create_output_file(outs, TRUE))
        if(!tool_create_output_file(outs))
          return failure;
      }
      break;
    }
    if(!outs->stream && !tool_create_output_file(outs, FALSE))
    if(!outs->stream && !tool_create_output_file(outs))
      return failure;
  }

@@ -172,7 +172,7 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
    /* bold headers only for selected protocols */
    char *value = NULL;

    if(!outs->stream && !tool_create_output_file(outs, FALSE))
    if(!outs->stream && !tool_create_output_file(outs))
      return failure;

    if(hdrcbdata->global->isatty && hdrcbdata->global->styled_output)
+4 −5
Original line number Diff line number Diff line
@@ -32,8 +32,7 @@
#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,
                             bool append)
bool tool_create_output_file(struct OutStruct *outs)
{
  struct GlobalConfig *global = outs->config->global;
  FILE *file;
@@ -43,7 +42,7 @@ bool tool_create_output_file(struct OutStruct *outs,
    return FALSE;
  }

  if(outs->is_cd_filename && !append) {
  if(outs->is_cd_filename) {
    /* don't overwrite existing files */
    file = fopen(outs->filename, "rb");
    if(file) {
@@ -55,7 +54,7 @@ bool tool_create_output_file(struct OutStruct *outs,
  }

  /* open file for writing */
  file = fopen(outs->filename, append?"ab":"wb");
  file = fopen(outs->filename, "wb");
  if(!file) {
    warnf(global, "Failed to create the file %s: %s\n", outs->filename,
          strerror(errno));
@@ -142,7 +141,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
  }
#endif

  if(!outs->stream && !tool_create_output_file(outs, FALSE))
  if(!outs->stream && !tool_create_output_file(outs))
    return failure;

  if(is_tty && (outs->bytes < 2000) && !config->terminal_binary_ok) {
+1 −1
Original line number Diff line number Diff line
@@ -30,6 +30,6 @@
size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata);

/* create a local file for writing, return TRUE on success */
bool tool_create_output_file(struct OutStruct *outs, bool append);
bool tool_create_output_file(struct OutStruct *outs);

#endif /* HEADER_CURL_TOOL_CB_WRT_H */
+1 −1
Original line number Diff line number Diff line
@@ -1583,7 +1583,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
            /* do not create (or even overwrite) the file in case we get no
               data because of unmet condition */
            curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &cond_unmet);
            if(!cond_unmet && !tool_create_output_file(&outs, FALSE))
            if(!cond_unmet && !tool_create_output_file(&outs))
              result = CURLE_WRITE_ERROR;
          }