]> git.sesse.net Git - vlc/blobdiff - src/text/strings.c
core: debug make_path for windows
[vlc] / src / text / strings.c
index 4b8d7925e5915ce8f17d0da4debbb265322466a7..eb0350aa651f22a1473b6013ab4f9922c2b99e0f 100644 (file)
@@ -962,10 +962,12 @@ char *str_format( vlc_object_t *p_this, const char *psz_src )
 /**
  * Remove forbidden characters from filenames (including slashes)
  */
-char* filename_sanitize( const char *str_origin )
+void filename_sanitize( char *str )
 {
-    char *str = strdup( str_origin );
+#if defined( WIN32 )
     char *str_base = str;
+#endif
+
     if( *str == '.' && (str[1] == '\0' || (str[1] == '.' && str[2] == '\0' ) ) )
     {
         while( *str )
@@ -973,7 +975,7 @@ char* filename_sanitize( const char *str_origin )
             *str = '_';
             str++;
         }
-        return str_base;
+        return;
     }
 
 #if defined( WIN32 )
@@ -1014,8 +1016,6 @@ char* filename_sanitize( const char *str_origin )
         *str-- = '_';
     }
 #endif
-
-    return str_base;
 }
 
 /**
@@ -1166,6 +1166,20 @@ char *make_path (const char *url)
     size_t schemelen = ((end != NULL) ? end : path) - url;
     path += 3; /* skip "://" */
 
+#ifdef WIN32
+
+    /* skip leading slash before disk drive
+     * when format is file:///C:/path/file.ext
+     */
+    if (schemelen == 4 && !strncasecmp (url, "file", 4))
+    {
+        char* search = strstr (path, ":/");
+        if( search && *path == '/' && search == path+2 )
+            path++;
+    }
+
+#endif
+
     /* Remove HTML anchor if present */
     end = strchr (path, '#');
     if (end)
@@ -1182,8 +1196,21 @@ char *make_path (const char *url)
     {
 #if (DIR_SEP_CHAR != '/')
         for (char *p = strchr (path, '/'); p; p = strchr (p, '/'))
-            *p == DIR_SEP_CHAR;
+            *p++ = DIR_SEP_CHAR;
 #endif
+
+#ifdef WIN32
+
+        /* check for disk drive in the form 'C:\...' */
+        char* search = strstr (path, ":"DIR_SEP);
+        if( search && search == path+1 )
+            return path;
+
+        if (*path && asprintf (&ret, "\\\\%s", path) == -1)
+            ret = NULL;
+
+        goto out;
+#else
         if (*path == DIR_SEP_CHAR)
             return path;
 
@@ -1193,12 +1220,7 @@ char *make_path (const char *url)
             memmove (path, path + 9, strlen (path + 9) + 1);
             return path;
         }
-
-#ifdef WIN32
-        if (*path && asprintf (&ret, "\\\\%s", path) == -1)
-            ret = NULL;
 #endif
-        /* non-local path :-( */
     }
     else
     if (schemelen == 2 && !strncasecmp (url, "fd", 2))