Commit 62c4ffb4 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

shlwapi: Support NT prefix paths in PathGetDriveNumberW.

parent 63d6dce0
...@@ -538,17 +538,25 @@ int WINAPI PathGetDriveNumberA(LPCSTR lpszPath) ...@@ -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) ...@@ -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) ...@@ -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)
......
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