[vlc-devel] commit: core: debug make_path for windows (Erwan Tulou )

git version control git at videolan.org
Thu Feb 11 17:51:55 CET 2010


vlc | branch: master | Erwan Tulou <erwan10 at videolan.org> | Thu Feb 11 17:18:33 2010 +0100| [37de4458fcac515a7683c1bd3da08a22d5c0d890] | committer: Erwan Tulou 

core: debug make_path for windows

   - infinite loop and typo fixed
   - remove leading slash forgotten

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=37de4458fcac515a7683c1bd3da08a22d5c0d890
---

 src/text/strings.c |   34 ++++++++++++++++++++++++++++------
 1 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/text/strings.c b/src/text/strings.c
index eb46c9e..eb0350a 100644
--- a/src/text/strings.c
+++ b/src/text/strings.c
@@ -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))




More information about the vlc-devel mailing list