Commit 84ea87f3 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

vlc_path2uri: allow file names starting with a pair of backslashes

parent 95c0e843
...@@ -124,9 +124,6 @@ int main (void) ...@@ -124,9 +124,6 @@ int main (void)
test_path ("/home/john//too///many//slashes", test_path ("/home/john//too///many//slashes",
"file:///home/john//too///many//slashes"); "file:///home/john//too///many//slashes");
test_path ("/home/john/music.ogg", "file:///home/john/music.ogg"); test_path ("/home/john/music.ogg", "file:///home/john/music.ogg");
test_path ("\\\\server/pub/music.ogg", "smb://server/pub/music.ogg");
test_path ("\\\\server\\pub\\music.ogg", "smb://server/pub/music.ogg");
test_path ("\\\\server", "smb://server");
/*int fd = open (".", O_RDONLY); /*int fd = open (".", O_RDONLY);
assert (fd != -1);*/ assert (fd != -1);*/
......
...@@ -174,7 +174,7 @@ char *vlc_path2uri (const char *path, const char *scheme) ...@@ -174,7 +174,7 @@ char *vlc_path2uri (const char *path, const char *scheme)
path = p; path = p;
#endif #endif
#if defined( _WIN32 ) || defined( __OS2__ ) #if defined (_WIN32) || defined (__OS2__)
/* Drive letter */ /* Drive letter */
if (isalpha ((unsigned char)path[0]) && (path[1] == ':')) if (isalpha ((unsigned char)path[0]) && (path[1] == ':'))
{ {
...@@ -190,47 +190,21 @@ char *vlc_path2uri (const char *path, const char *scheme) ...@@ -190,47 +190,21 @@ char *vlc_path2uri (const char *path, const char *scheme)
} }
} }
else else
#endif
if (!strncmp (path, "\\\\", 2)) if (!strncmp (path, "\\\\", 2))
{ /* Windows UNC paths */ { /* Windows UNC paths */
#if !defined( _WIN32 ) && !defined( __OS2__ )
if (scheme != NULL)
{
errno = ENOTSUP;
return NULL; /* remote files not supported */
}
/* \\host\share\path -> smb://host/share/path */
if (strchr (path + 2, '\\') != NULL)
{ /* Convert backslashes to slashes */
char *dup = strdup (path);
if (dup == NULL)
return NULL;
for (size_t i = 2; dup[i]; i++)
if (dup[i] == '\\')
dup[i] = DIR_SEP_CHAR;
char *ret = vlc_path2uri (dup, scheme);
free (dup);
return ret;
}
# define SMB_SCHEME "smb"
#else
/* \\host\share\path -> file://host/share/path */ /* \\host\share\path -> file://host/share/path */
# define SMB_SCHEME "file"
#endif
size_t hostlen = strcspn (path + 2, DIR_SEP); size_t hostlen = strcspn (path + 2, DIR_SEP);
buf = malloc (sizeof (SMB_SCHEME) + 3 + hostlen); buf = malloc (7 + hostlen);
if (buf != NULL) if (buf != NULL)
snprintf (buf, sizeof (SMB_SCHEME) + 3 + hostlen, snprintf (buf, 7 + hostlen, "file://%s", path + 2);
SMB_SCHEME"://%s", path + 2);
path += 2 + hostlen; path += 2 + hostlen;
if (path[0] == '\0') if (path[0] == '\0')
return buf; /* Hostname without path */ return buf; /* Hostname without path */
} }
else else
#endif
if (path[0] != DIR_SEP_CHAR) if (path[0] != DIR_SEP_CHAR)
{ /* Relative path: prepend the current working directory */ { /* Relative path: prepend the current working directory */
char *cwd, *ret; char *cwd, *ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment