1 #include "precomp.h"
2 
3 #define IS_DRIVE_TYPE_VALID(type) ((type) != DRIVE_UNKNOWN && (type) != DRIVE_NO_ROOT_DIR)
4 
START_TEST(GetDriveType)5 START_TEST(GetDriveType)
6 {
7     UINT Type, Type2, i;
8     WCHAR Path[MAX_PATH];
9 
10     /* Note: Successful calls can set last error to at least ERROR_NOT_A_REPARSE_POINT, we don't test it here */
11     SetLastError(0xdeadbeaf);
12 
13     Type = GetDriveTypeW(L"");
14     ok(Type == DRIVE_NO_ROOT_DIR, "Expected DRIVE_NO_ROOT_DIR, got %u\n", Type);
15 
16     Type = GetDriveTypeW(L"\nC:\\");
17     ok(Type == DRIVE_NO_ROOT_DIR, "Expected DRIVE_NO_ROOT_DIR, got %u\n", Type);
18 
19     Type = GetDriveTypeW(L"Q:\\");
20     ok(Type == DRIVE_NO_ROOT_DIR, "Expected DRIVE_NO_ROOT_DIR, got %u\n", Type);
21 
22     ok(GetLastError() == 0xdeadbeaf, "Expected no errors, got %lu\n", GetLastError());
23 
24     /* Drive root is accepted without ending slash */
25     Type = GetDriveTypeW(L"C:");
26     ok(IS_DRIVE_TYPE_VALID(Type), "Expected valid drive type, got %u\n", Type);
27 
28     Type = GetDriveTypeW(L"C:\\");
29     ok(IS_DRIVE_TYPE_VALID(Type), "Expected valid drive type, got %u\n", Type);
30 
31     Type = GetDriveTypeW(NULL);
32     ok(IS_DRIVE_TYPE_VALID(Type), "Expected valid drive type, got %u\n", Type);
33 
34     i = GetCurrentDirectoryW(sizeof(Path)/sizeof(Path[0]), Path);
35     if (i)
36     {
37         /* No trailing backslash returned unless we're at the drive root */
38         if (Path[i - 1] != L'\\')
39         {
40             SetLastError(0xdeadbeaf);
41             Type2 = GetDriveTypeW(Path);
42             ok(Type2 == DRIVE_NO_ROOT_DIR, "Expected DRIVE_NO_ROOT_DIR, got %u\n", Type2);
43             ok(GetLastError() == 0xdeadbeaf, "Expected no errors, got %lu\n", GetLastError());
44 
45             StringCchCopyW(Path + i, MAX_PATH - i, L"\\");
46         }
47         Type2 = GetDriveTypeW(Path);
48         ok(Type == Type2, "Types are not equal: %u != %u\n", Type, Type2);
49     }
50 
51     i = GetSystemDirectoryW(Path, sizeof(Path)/sizeof(Path[0]));
52     if (i)
53     {
54         /* Note: there is no backslash at the end of Path */
55         SetLastError(0xdeadbeaf);
56         Type = GetDriveTypeW(Path);
57         ok(Type == DRIVE_NO_ROOT_DIR, "Expected DRIVE_NO_ROOT_DIR, got %u\n", Type);
58         ok(GetLastError() == 0xdeadbeaf, "Expected no errors, got %lu\n", GetLastError());
59 
60         StringCchCopyW(Path + i, MAX_PATH - i, L"\\");
61         Type = GetDriveTypeW(Path);
62         ok(IS_DRIVE_TYPE_VALID(Type), "Expected valid drive type, got %u\n", Type);
63 
64         StringCchCopyW(Path + i, MAX_PATH - i, L"/");
65         Type = GetDriveTypeW(Path);
66         ok(IS_DRIVE_TYPE_VALID(Type), "Expected valid drive type, got %u\n", Type);
67 
68         StringCchCopyW(Path + i, MAX_PATH - i, L"\\\\");
69         Type = GetDriveTypeW(Path);
70         ok(IS_DRIVE_TYPE_VALID(Type), "Expected valid drive type, got %u\n", Type);
71     }
72 }
73