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)
{
#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;
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))