From 4e02a3bb1383f7191226b6b03c07aee47151c80a Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 26 Jun 2017 12:19:56 +0200 Subject: [PATCH] ntdll: Set iosb status in server_ioctl_file. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/ntdll/file.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c index b73af7e1f0b..0d7efc3dd54 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -1560,6 +1560,7 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE event, NtClose( wait_handle ); } + if (status != STATUS_PENDING && code != FSCTL_PIPE_LISTEN) io->u.Status = status; return status; } @@ -1644,8 +1645,8 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event, } if (status == STATUS_NOT_SUPPORTED || status == STATUS_BAD_DEVICE_TYPE) - status = server_ioctl_file( handle, event, apc, apc_context, io, code, - in_buffer, in_size, out_buffer, out_size ); + return server_ioctl_file( handle, event, apc, apc_context, io, code, + in_buffer, in_size, out_buffer, out_size ); if (status != STATUS_PENDING) io->u.Status = status; return status; @@ -1694,7 +1695,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc status = server_ioctl_file( handle, event, apc, apc_context, io, code, in_buffer, in_size, out_buffer, out_size ); if (!status) status = DIR_unmount_device( handle ); - break; + return status; case FSCTL_PIPE_PEEK: { @@ -1710,8 +1711,8 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc if ((status = server_get_unix_fd( handle, FILE_READ_DATA, &fd, &needs_close, NULL, NULL ))) { if (status == STATUS_BAD_DEVICE_TYPE) - status = server_ioctl_file( handle, event, apc, apc_context, io, code, - in_buffer, in_size, out_buffer, out_size ); + return server_ioctl_file( handle, event, apc, apc_context, io, code, + in_buffer, in_size, out_buffer, out_size ); break; } @@ -1767,11 +1768,6 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc int fd = server_remove_fd_from_cache( handle ); if (fd != -1) close( fd ); } - break; - - case FSCTL_PIPE_LISTEN: - status = server_ioctl_file( handle, event, apc, apc_context, io, code, - in_buffer, in_size, out_buffer, out_size ); return status; case FSCTL_PIPE_IMPERSONATE: @@ -1814,11 +1810,9 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc io->Information = 0; status = STATUS_SUCCESS; break; - case FSCTL_PIPE_WAIT: default: - status = server_ioctl_file( handle, event, apc, apc_context, io, code, - in_buffer, in_size, out_buffer, out_size ); - break; + return server_ioctl_file( handle, event, apc, apc_context, io, code, + in_buffer, in_size, out_buffer, out_size ); } if (status != STATUS_PENDING) io->u.Status = status; -- 2.11.4.GIT