From 683099598f56185526fe9f18530d45e480069673 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 27 Dec 2008 10:31:53 +0000 Subject: [PATCH] - Fix 11 tests for OpenFile svn path=/trunk/; revision=38374 --- reactos/dll/win32/kernel32/file/file.c | 60 ++++++++++++++++++++------ 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index f457604e010..2394e0fbedb 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -236,9 +236,35 @@ OpenFile(LPCSTR lpFileName, if (lpReOpenBuff == NULL) { - return FALSE; + return HFILE_ERROR; } + lpReOpenBuff->cBytes = sizeof(OFSTRUCT); + lpReOpenBuff->nErrCode = 0; + + if (uStyle & OF_REOPEN) lpFileName = lpReOpenBuff->szPathName; + + if (!lpFileName) + { + return HFILE_ERROR; + } + + if (!GetFullPathNameA(lpFileName, + sizeof(lpReOpenBuff->szPathName), + lpReOpenBuff->szPathName, + NULL)) + { + lpReOpenBuff->nErrCode = GetLastError(); + return HFILE_ERROR; + } + + if (uStyle & OF_PARSE) + { + lpReOpenBuff->fFixedDisk = (GetDriveTypeA(lpReOpenBuff->szPathName) != DRIVE_REMOVABLE); + TRACE("(%s): OF_PARSE, res = '%s'\n", lpFileName, lpReOpenBuff->szPathName); + return 0; + } + if ((uStyle & OF_CREATE) == OF_CREATE) { DWORD Sharing; @@ -280,9 +306,21 @@ OpenFile(LPCSTR lpFileName, if (Len == 0 || Len > OFS_MAXPATHNAME) { + lpReOpenBuff->nErrCode = GetLastError(); return (HFILE)INVALID_HANDLE_VALUE; } + if (uStyle & OF_DELETE) + { + if (!DeleteFileW(PathNameW)) + { + lpReOpenBuff->nErrCode = GetLastError(); + return HFILE_ERROR; + } + TRACE("(%s): OF_DELETE return = OK\n", lpFileName); + return TRUE; + } + FileName.Buffer = lpReOpenBuff->szPathName; FileName.Length = 0; FileName.MaximumLength = OFS_MAXPATHNAME; @@ -306,14 +344,6 @@ OpenFile(LPCSTR lpFileName, // FILE_SHARE_READ // FILE_NO_INTERMEDIATE_BUFFERING - if ((uStyle & OF_PARSE) == OF_PARSE) - { - RtlFreeHeap(RtlGetProcessHeap(), - 0, - FileNameString.Buffer); - return (HFILE)NULL; - } - ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES); ObjectAttributes.RootDirectory = NULL; ObjectAttributes.ObjectName = &FileNameString; @@ -328,11 +358,9 @@ OpenFile(LPCSTR lpFileName, FILE_SHARE_READ, FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT); - RtlFreeHeap(RtlGetProcessHeap(), - 0, - FileNameString.Buffer); + RtlFreeHeap(RtlGetProcessHeap(), 0, FileNameString.Buffer); - lpReOpenBuff->nErrCode = (WORD)RtlNtStatusToDosError(errCode); + lpReOpenBuff->nErrCode = RtlNtStatusToDosError(errCode); if (!NT_SUCCESS(errCode)) { @@ -340,6 +368,12 @@ OpenFile(LPCSTR lpFileName, return (HFILE)INVALID_HANDLE_VALUE; } + if (uStyle & OF_EXIST) + { + NtClose(FileHandle); + return TRUE; + } + return (HFILE)FileHandle; }