]> granicus.if.org Git - curl/commitdiff
src/tool_cb_wrt: separate fnc for output file creation
authorKamil Dudka <kdudka@redhat.com>
Mon, 30 Mar 2015 11:45:22 +0000 (13:45 +0200)
committerKamil Dudka <kdudka@redhat.com>
Wed, 8 Apr 2015 07:36:56 +0000 (09:36 +0200)
src/tool_cb_wrt.c

index 17d0409f2e799da1863ace6280c41aa89b64750e..9be393ff212930abd70452fc12754b03ad8aa93b 100644 (file)
 
 #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));
-      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);