]> granicus.if.org Git - curl/commitdiff
curl: make --create-dirs on windows grok both forward and backward slashes
authorDaniel Stenberg <daniel@haxx.se>
Tue, 13 Sep 2016 13:20:05 +0000 (15:20 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 14 Sep 2016 05:48:43 +0000 (07:48 +0200)
Reported-by: Ryan Scott
Fixes #1007

src/tool_dirhie.c

index db810d647ecb76d09984b0b0a7c87a8d61381091..23bb2cb425364a6184836ab7fe3c330edbce6181 100644 (file)
@@ -91,6 +91,14 @@ static void show_dir_errno(FILE *errors, const char *name)
  *  should create all the dir* automagically
  */
 
+#ifdef WIN32
+/* systems that may use either or when specifying a path */
+#define PATH_DELIMITERS "\\/"
+#else
+#define PATH_DELIMITERS DIR_CHAR
+#endif
+
+
 CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
 {
   char *tempdir;
@@ -114,10 +122,10 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
 
   /* Allow strtok() here since this isn't used threaded */
   /* !checksrc! disable BANNEDFUNC 2 */
-  tempdir = strtok(outdup, DIR_CHAR);
+  tempdir = strtok(outdup, PATH_DELIMITERS);
 
   while(tempdir != NULL) {
-    tempdir2 = strtok(NULL, DIR_CHAR);
+    tempdir2 = strtok(NULL, PATH_DELIMITERS);
     /* since strtok returns a token for the last word even
        if not ending with DIR_CHAR, we need to prune it */
     if(tempdir2 != NULL) {
@@ -125,7 +133,8 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
       if(dlen)
         snprintf(&dirbuildup[dlen], outlen - dlen, "%s%s", DIR_CHAR, tempdir);
       else {
-        if(0 != strncmp(outdup, DIR_CHAR, 1))
+        if(outdup == tempdir)
+          /* the output string doesn't start with a separator */
           strcpy(dirbuildup, tempdir);
         else
           snprintf(dirbuildup, outlen, "%s%s", DIR_CHAR, tempdir);