mirror of
git://source.winehq.org/git/wine.git
synced 2024-07-21 11:34:12 +00:00
shlwapi: Support NT prefix paths in PathGetDriveNumberW.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
63d6dce047
commit
62c4ffb4d6
|
@ -538,17 +538,25 @@ int WINAPI PathGetDriveNumberA(LPCSTR lpszPath)
|
||||||
*
|
*
|
||||||
* See PathGetDriveNumberA.
|
* See PathGetDriveNumberA.
|
||||||
*/
|
*/
|
||||||
int WINAPI PathGetDriveNumberW(LPCWSTR lpszPath)
|
int WINAPI PathGetDriveNumberW(const WCHAR *path)
|
||||||
{
|
{
|
||||||
TRACE ("(%s)\n",debugstr_w(lpszPath));
|
WCHAR drive;
|
||||||
|
|
||||||
if (lpszPath)
|
static const WCHAR nt_prefixW[] = {'\\','\\','?','\\'};
|
||||||
{
|
|
||||||
WCHAR tl = tolowerW(lpszPath[0]);
|
TRACE("(%s)\n", debugstr_w(path));
|
||||||
if (tl >= 'a' && tl <= 'z' && lpszPath[1] == ':')
|
|
||||||
return tl - 'a';
|
if (!path)
|
||||||
}
|
return -1;
|
||||||
return -1;
|
|
||||||
|
if (!strncmpW(path, nt_prefixW, 4))
|
||||||
|
path += 4;
|
||||||
|
|
||||||
|
drive = tolowerW(path[0]);
|
||||||
|
if (drive < 'a' || drive > 'z' || path[1] != ':')
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return drive - 'a';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|
|
@ -1429,6 +1429,11 @@ static void test_PathGetDriveNumber(void)
|
||||||
static const CHAR test2A[] = "file:////b:\\test.file";
|
static const CHAR test2A[] = "file:////b:\\test.file";
|
||||||
static const CHAR test3A[] = "file:///c:\\test.file";
|
static const CHAR test3A[] = "file:///c:\\test.file";
|
||||||
static const CHAR test4A[] = "file:\\\\c:\\test.file";
|
static const CHAR test4A[] = "file:\\\\c:\\test.file";
|
||||||
|
static const CHAR test5A[] = "\\\\?\\C:\\dir\\file.txt";
|
||||||
|
static const WCHAR test1W[] =
|
||||||
|
{'a',':','\\',0};
|
||||||
|
static const WCHAR test5W[] =
|
||||||
|
{'\\','\\','?','\\','C',':','\\','d','i','r','\\','f','i','l','e',0};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
|
@ -1438,12 +1443,19 @@ static void test_PathGetDriveNumber(void)
|
||||||
|
|
||||||
ret = PathGetDriveNumberA(test1A);
|
ret = PathGetDriveNumberA(test1A);
|
||||||
ok(ret == 0, "got %d\n", ret);
|
ok(ret == 0, "got %d\n", ret);
|
||||||
|
ret = PathGetDriveNumberW(test1W);
|
||||||
|
ok(ret == 0, "got %d\n", ret);
|
||||||
ret = PathGetDriveNumberA(test2A);
|
ret = PathGetDriveNumberA(test2A);
|
||||||
ok(ret == -1, "got %d\n", ret);
|
ok(ret == -1, "got %d\n", ret);
|
||||||
ret = PathGetDriveNumberA(test3A);
|
ret = PathGetDriveNumberA(test3A);
|
||||||
ok(ret == -1, "got %d\n", ret);
|
ok(ret == -1, "got %d\n", ret);
|
||||||
ret = PathGetDriveNumberA(test4A);
|
ret = PathGetDriveNumberA(test4A);
|
||||||
ok(ret == -1, "got %d\n", ret);
|
ok(ret == -1, "got %d\n", ret);
|
||||||
|
|
||||||
|
ret = PathGetDriveNumberA(test5A);
|
||||||
|
ok(ret == -1, "got %d\n", ret);
|
||||||
|
ret = PathGetDriveNumberW(test5W);
|
||||||
|
ok(ret == 2 || broken(ret == -1) /* winxp */, "got = %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_PathUnExpandEnvStrings(void)
|
static void test_PathUnExpandEnvStrings(void)
|
||||||
|
|
Loading…
Reference in a new issue