Author: jgardou
Date: Thu Feb 6 22:10:44 2014
New Revision: 62019
URL:
http://svn.reactos.org/svn/reactos?rev=62019&view=rev
Log:
[KERNEL32]
- Use current directory for NULL parameter in GetDriveType
Patch by Kenneth Deane (kde678 __AT__ gmail __DOT__ com), slightly modified by myself.
Thanks!
Modified:
trunk/reactos/dll/win32/kernel32/client/file/disk.c
Modified: trunk/reactos/dll/win32/kernel32/client/file/disk.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/file/disk.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/file/disk.c [iso-8859-1] Thu Feb 6 22:10:44
2014
@@ -360,6 +360,9 @@
{
PWCHAR RootPathNameW;
+ if (!lpRootPathName)
+ return GetDriveTypeW(NULL);
+
if (!(RootPathNameW = FilenameA2W(lpRootPathName, FALSE)))
return DRIVE_UNKNOWN;
@@ -373,13 +376,31 @@
WINAPI
GetDriveTypeW(IN LPCWSTR lpRootPathName)
{
- FILE_FS_DEVICE_INFORMATION FileFsDevice;
- IO_STATUS_BLOCK IoStatusBlock;
-
- HANDLE hFile;
- NTSTATUS errCode;
-
- hFile = InternalOpenDirW(lpRootPathName, FALSE);
+ FILE_FS_DEVICE_INFORMATION FileFsDevice;
+ IO_STATUS_BLOCK IoStatusBlock;
+ HANDLE hFile;
+ NTSTATUS errCode;
+
+ if (!lpRootPathName)
+ {
+ /* If NULL is passed, use current directory path */
+ DWORD BufferSize = GetCurrentDirectoryW(0, NULL);
+ LPWSTR CurrentDir = HeapAlloc(GetProcessHeap(), 0, BufferSize * sizeof(WCHAR));
+ if (!CurrentDir)
+ return DRIVE_UNKNOWN;
+ if (!GetCurrentDirectoryW(BufferSize, CurrentDir))
+ {
+ HeapFree(GetProcessHeap(), 0, CurrentDir);
+ return DRIVE_UNKNOWN;
+ }
+ hFile = InternalOpenDirW(CurrentDir, FALSE);
+ HeapFree(GetProcessHeap(), 0, CurrentDir);
+ }
+ else
+ {
+ hFile = InternalOpenDirW(lpRootPathName, FALSE);
+ }
+
if (hFile == INVALID_HANDLE_VALUE)
{
return DRIVE_NO_ROOT_DIR; /* According to WINE regression tests */