Commit 3bb3090a authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

make_URI: handle Windows UNC paths

(cherry picked from commit 644185a5)
parent 2bc45f5c
......@@ -108,7 +108,8 @@ int main (void)
test_path ("/", "file:///");
test_path ("/home/john/", "file:///home/john/");
test_path ("/home/john/music.ogg", "file:///home/john/music.ogg");
//test_path ("\\\\server/pub/music.ogg", "file://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");
/*int fd = open (".", O_RDONLY);
assert (fd != -1);*/
......
......@@ -1079,15 +1079,37 @@ char *make_URI (const char *path)
}
else
#endif
#if 0
/* Windows UNC paths (file://host/share/path instead of file:///path) */
if (!strncmp (path, "\\\\", 2))
{
path += 2;
buf = strdup ("file://");
{ /* Windows UNC paths */
#ifndef WIN32
/* \\host\share\path -> smb://host/share/path */
if (strchr (path + 2, '\\') != NULL)
{ /* Convert antislashes 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 = make_URI (dup);
free (dup);
return ret;
}
# define SMB_SCHEME "smb"
#else
/* \\host\share\path -> file://host/share/path */
# define SMB_SCHEME "file"
#endif
size_t hostlen = strcspn (path + 2, DIR_SEP);
buf = malloc (sizeof (SMB_SCHEME) + 3 + hostlen);
if (buf != NULL)
snprintf (buf, sizeof (SMB_SCHEME) + 3 + hostlen,
SMB_SCHEME"://%s", path + 2);
path += 2 + hostlen;
}
else
#endif
if (path[0] != DIR_SEP_CHAR)
{ /* Relative path: prepend the current working directory */
char cwd[PATH_MAX];
......
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