[C-style comments] PR 16592: dlls/kernel32/volume.c
G. Paul Ziemba
p-wine-bugs at ziemba.us
Tue Jan 6 13:38:55 CST 2009
Fix for PR 16592, GetVolumeInformationW() handling of unusual "root"
parameter.
--- dlls/kernel32/volume.c.orig 2008-12-05 08:57:45.000000000 -0800
+++ dlls/kernel32/volume.c 2008-12-22 00:15:51.000000000 -0800
@@ -518,7 +518,7 @@
HANDLE handle;
enum fs_type type = FS_UNKNOWN;
- if (!root)
+ if (!root || (root && root[0] == '\\' && root[1] == ':'))
{
WCHAR path[MAX_PATH];
GetCurrentDirectoryW( MAX_PATH, path );
--- dlls/kernel32/tests/volume.c.orig 2008-12-05 08:57:45.000000000 -0800
+++ dlls/kernel32/tests/volume.c 2009-01-06 09:52:19.000000000 -0800
@@ -29,6 +29,9 @@
static BOOL (WINAPI *pFindVolumeClose)(HANDLE);
static UINT (WINAPI *pGetLogicalDriveStringsA)(UINT,LPSTR);
static UINT (WINAPI *pGetLogicalDriveStringsW)(UINT,LPWSTR);
+static BOOL (WINAPI *pGetVolumeInformationW)(LPCWSTR,LPWSTR,DWORD,
+ DWORD*,DWORD*,DWORD*,LPWSTR,DWORD);
+static BOOL (WINAPI *pSetCurrentDirectoryA)(LPCSTR);
/* ############################### */
@@ -216,6 +219,48 @@
HeapFree(GetProcessHeap(), 0, buf);
}
+static void test_GetVolumeInformationW(void)
+{
+ /*
+ * Check handling of root == "\\:"
+ * http://bugs.winehq.org/show_bug.cgi?id=16592
+ */
+
+ BOOL rc;
+ WCHAR root[] = {'\\',':',0};
+
+ if (!pGetVolumeInformationW) {
+ win_skip("GetVolumeInformationW not available\n");
+ return;
+ }
+
+ if (!pSetCurrentDirectoryA) {
+ win_skip("SetCurrentDirectoryA not available\n");
+ return;
+ }
+
+ /*
+ * set current directory because GetVolumeInformationW refers
+ * to it in this test case
+ */
+ rc = pSetCurrentDirectoryA("C:\\");
+
+ ok(rc, "SetCurrentDirectoryA(\"C:\\\\\") failed\n");
+
+ rc = pGetVolumeInformationW(
+ root, /* Root */
+ NULL, /* pLabel */
+ 0, /* LabelLen */
+ NULL, /* pSerial */
+ NULL, /* pFilenameLen */
+ NULL, /* pFlags */
+ NULL, /* pFsname */
+ 0 /* FsnameLen */
+ );
+
+ ok(rc, "GetVolumeInformationW doesn't handle root == \"\\\\:\" case\n");
+}
+
START_TEST(volume)
{
hdll = GetModuleHandleA("kernel32.dll");
@@ -226,6 +271,8 @@
pFindVolumeClose = (void *) GetProcAddress(hdll, "FindVolumeClose");
pGetLogicalDriveStringsA = (void *) GetProcAddress(hdll, "GetLogicalDriveStringsA");
pGetLogicalDriveStringsW = (void *) GetProcAddress(hdll, "GetLogicalDriveStringsW");
+ pGetVolumeInformationW = (void *) GetProcAddress(hdll, "GetVolumeInformationW");
+ pSetCurrentDirectoryA = (void *) GetProcAddress(hdll, "SetCurrentDirectoryA");
test_query_dos_deviceA();
test_FindFirstVolume();
@@ -233,4 +280,5 @@
test_GetVolumeNameForVolumeMountPointW();
test_GetLogicalDriveStringsA();
test_GetLogicalDriveStringsW();
+ test_GetVolumeInformationW();
}
--
G. Paul Ziemba
FreeBSD unix:
11:36AM up 12 days, 22:15, 12 users, load averages: 0.30, 0.57, 0.45
More information about the wine-patches
mailing list