Commit 615bcffe authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

make_URI: fix assertion failures (fix #3956)

Handles "\\hostname" properly.
On Windows, error out on "X:directory" instead of aborting. Looking up
the current directory of the specified drive letter would be a better,
though.
parent db6104c7
...@@ -127,6 +127,7 @@ int main (void) ...@@ -127,6 +127,7 @@ int main (void)
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\\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);*/
......
...@@ -1048,11 +1048,16 @@ char *make_URI (const char *path, const char *scheme) ...@@ -1048,11 +1048,16 @@ char *make_URI (const char *path, const char *scheme)
char *buf; char *buf;
#ifdef WIN32 #ifdef WIN32
/* Drive letter */
if (isalpha (path[0]) && (path[1] == ':')) if (isalpha (path[0]) && (path[1] == ':'))
{ {
if (asprintf (&buf, "%s:///%c:", scheme ? scheme : "file", path[0]) == -1) if (asprintf (&buf, "%s:///%c:", scheme ? scheme : "file",
path[0]) == -1)
buf = NULL; buf = NULL;
path += 2; path += 2;
# warning Drive letter-relative path not implemented!
if (path[0] != DIR_SEP_CHAR)
return NULL;
} }
else else
#endif #endif
...@@ -1088,6 +1093,9 @@ char *make_URI (const char *path, const char *scheme) ...@@ -1088,6 +1093,9 @@ char *make_URI (const char *path, const char *scheme)
snprintf (buf, sizeof (SMB_SCHEME) + 3 + hostlen, snprintf (buf, sizeof (SMB_SCHEME) + 3 + hostlen,
SMB_SCHEME"://%s", path + 2); SMB_SCHEME"://%s", path + 2);
path += 2 + hostlen; path += 2 + hostlen;
if (path[0] == '\0')
return buf; /* Hostname without path */
} }
else else
if (path[0] != DIR_SEP_CHAR) if (path[0] != DIR_SEP_CHAR)
......
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