diff options
Diffstat (limited to 'utils/fs/fs.c')
-rw-r--r-- | utils/fs/fs.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/utils/fs/fs.c b/utils/fs/fs.c index 4a761e5f9e..f6c8cfda16 100644 --- a/utils/fs/fs.c +++ b/utils/fs/fs.c @@ -91,12 +91,16 @@ wchar_t* FS(create_device_name) (const wchar_t* filename) { free (temp); + int startOffset = 0; + /* When remapping a network share, \\foo needs to become + \\?\UNC\foo and not \\?\\UNC\\foo which is an invalid path. */ if (wcsncmp (network_share, result, 2) == 0) { if (swprintf (ns, 10, L"%ls%ls", win32_file_namespace, unc_prefix) <= 0) { goto cleanup; } + startOffset = 2; } else if (swprintf (ns, 10, L"%ls", win32_file_namespace) <= 0) { @@ -104,8 +108,8 @@ wchar_t* FS(create_device_name) (const wchar_t* filename) { } /* Create new string. */ - int bLen = wcslen (result) + wcslen (ns) + 1; - temp = _wcsdup (result); + int bLen = wcslen (result) + wcslen (ns) + 1 - startOffset; + temp = _wcsdup (result + startOffset); free (result); result = malloc (bLen * sizeof (wchar_t)); if (swprintf (result, bLen, L"%ls%ls", ns, temp) <= 0) |