mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 16:10:29 +00:00
- Fix 11 tests for OpenFile
svn path=/trunk/; revision=38374
This commit is contained in:
parent
128f584a7d
commit
683099598f
1 changed files with 47 additions and 13 deletions
|
@ -236,9 +236,35 @@ OpenFile(LPCSTR lpFileName,
|
||||||
|
|
||||||
if (lpReOpenBuff == NULL)
|
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)
|
if ((uStyle & OF_CREATE) == OF_CREATE)
|
||||||
{
|
{
|
||||||
DWORD Sharing;
|
DWORD Sharing;
|
||||||
|
@ -280,9 +306,21 @@ OpenFile(LPCSTR lpFileName,
|
||||||
|
|
||||||
if (Len == 0 || Len > OFS_MAXPATHNAME)
|
if (Len == 0 || Len > OFS_MAXPATHNAME)
|
||||||
{
|
{
|
||||||
|
lpReOpenBuff->nErrCode = GetLastError();
|
||||||
return (HFILE)INVALID_HANDLE_VALUE;
|
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.Buffer = lpReOpenBuff->szPathName;
|
||||||
FileName.Length = 0;
|
FileName.Length = 0;
|
||||||
FileName.MaximumLength = OFS_MAXPATHNAME;
|
FileName.MaximumLength = OFS_MAXPATHNAME;
|
||||||
|
@ -306,14 +344,6 @@ OpenFile(LPCSTR lpFileName,
|
||||||
// FILE_SHARE_READ
|
// FILE_SHARE_READ
|
||||||
// FILE_NO_INTERMEDIATE_BUFFERING
|
// FILE_NO_INTERMEDIATE_BUFFERING
|
||||||
|
|
||||||
if ((uStyle & OF_PARSE) == OF_PARSE)
|
|
||||||
{
|
|
||||||
RtlFreeHeap(RtlGetProcessHeap(),
|
|
||||||
0,
|
|
||||||
FileNameString.Buffer);
|
|
||||||
return (HFILE)NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
|
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
|
||||||
ObjectAttributes.RootDirectory = NULL;
|
ObjectAttributes.RootDirectory = NULL;
|
||||||
ObjectAttributes.ObjectName = &FileNameString;
|
ObjectAttributes.ObjectName = &FileNameString;
|
||||||
|
@ -328,11 +358,9 @@ OpenFile(LPCSTR lpFileName,
|
||||||
FILE_SHARE_READ,
|
FILE_SHARE_READ,
|
||||||
FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT);
|
FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT);
|
||||||
|
|
||||||
RtlFreeHeap(RtlGetProcessHeap(),
|
RtlFreeHeap(RtlGetProcessHeap(), 0, FileNameString.Buffer);
|
||||||
0,
|
|
||||||
FileNameString.Buffer);
|
|
||||||
|
|
||||||
lpReOpenBuff->nErrCode = (WORD)RtlNtStatusToDosError(errCode);
|
lpReOpenBuff->nErrCode = RtlNtStatusToDosError(errCode);
|
||||||
|
|
||||||
if (!NT_SUCCESS(errCode))
|
if (!NT_SUCCESS(errCode))
|
||||||
{
|
{
|
||||||
|
@ -340,6 +368,12 @@ OpenFile(LPCSTR lpFileName,
|
||||||
return (HFILE)INVALID_HANDLE_VALUE;
|
return (HFILE)INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (uStyle & OF_EXIST)
|
||||||
|
{
|
||||||
|
NtClose(FileHandle);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
return (HFILE)FileHandle;
|
return (HFILE)FileHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue