mirror of
https://github.com/reactos/wine.git
synced 2025-01-20 10:44:09 +00:00
ntdll: Unify the checks for asynchronous NtReadFile behaviour.
This commit is contained in:
parent
5e5fb99755
commit
fe3bc8c574
@ -587,7 +587,7 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
|
||||
ULONG total = 0;
|
||||
enum server_fd_type type;
|
||||
ULONG_PTR cvalue = apc ? 0 : (ULONG_PTR)apc_user;
|
||||
BOOL send_completion = FALSE;
|
||||
BOOL send_completion = FALSE, async_read;
|
||||
|
||||
TRACE("(%p,%p,%p,%p,%p,%p,0x%08x,%p,%p),partial stub!\n",
|
||||
hFile,hEvent,apc,apc_user,io_status,buffer,length,offset,key);
|
||||
@ -604,9 +604,11 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
|
||||
goto done;
|
||||
}
|
||||
|
||||
async_read = !(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT));
|
||||
|
||||
if (type == FD_TYPE_FILE)
|
||||
{
|
||||
if (!(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)) && (!offset || offset->QuadPart < 0))
|
||||
if (async_read && (!offset || offset->QuadPart < 0))
|
||||
{
|
||||
status = STATUS_INVALID_PARAMETER;
|
||||
goto done;
|
||||
@ -623,7 +625,7 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if (options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT))
|
||||
if (!async_read)
|
||||
/* update file pointer position */
|
||||
lseek( unix_handle, offset->QuadPart + result, SEEK_SET );
|
||||
|
||||
@ -634,7 +636,7 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
|
||||
}
|
||||
else if (type == FD_TYPE_SERIAL)
|
||||
{
|
||||
if (!(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)) && (!offset || offset->QuadPart < 0))
|
||||
if (async_read && (!offset || offset->QuadPart < 0))
|
||||
{
|
||||
status = STATUS_INVALID_PARAMETER;
|
||||
goto done;
|
||||
@ -675,7 +677,7 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)))
|
||||
if (async_read)
|
||||
{
|
||||
async_fileio_read *fileio;
|
||||
BOOL avail_mode;
|
||||
|
Loading…
x
Reference in New Issue
Block a user