Jacek Caban : ntdll: Set iosb status in server_ioctl_file.

Alexandre Julliard julliard at winehq.org
Wed Jun 28 15:10:25 CDT 2017


Module: wine
Branch: master
Commit: 4e02a3bb1383f7191226b6b03c07aee47151c80a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4e02a3bb1383f7191226b6b03c07aee47151c80a

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jun 26 12:19:56 2017 +0200

ntdll: Set iosb status in server_ioctl_file.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 b73af7e..0d7efc3 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;




More information about the wine-cvs mailing list