]> git.sesse.net Git - vlc/commitdiff
core: debug make_path for windows
authorErwan Tulou <erwan10@videolan.org>
Thu, 11 Feb 2010 16:18:33 +0000 (17:18 +0100)
committerErwan Tulou <erwan10@videolan.org>
Thu, 11 Feb 2010 16:49:37 +0000 (17:49 +0100)
   - infinite loop and typo fixed
   - remove leading slash forgotten

src/text/strings.c

index eb46c9e5bf05e7ea41b4ba2378de78b85af7ad11..eb0350aa651f22a1473b6013ab4f9922c2b99e0f 100644 (file)
@@ -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))