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/f... ============================================================================== --- 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 */