Module: wine
Branch: master
Commit: 62df7633e5328ff94295ceabe5fa45e48f34ceb7
URL: https://gitlab.winehq.org/wine/wine/-/commit/62df7633e5328ff94295ceabe5fa45…
Author: Elizabeth Figura <zfigura(a)codeweavers.com>
Date: Thu Jun 13 22:20:29 2024 -0500
ntdll: Do not set io->Status at the end of sock_ioctl().
The only cases this affects are Wine-internal sockopt ioctls, and ws2_32 does not read back the IOSB status for those.
---
dlls/ntdll/unix/socket.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/unix/socket.c b/dlls/ntdll/unix/socket.c
index 587faf51ccf..78f24a081c3 100644
--- a/dlls/ntdll/unix/socket.c
+++ b/dlls/ntdll/unix/socket.c
@@ -1485,6 +1485,10 @@ NTSTATUS sock_ioctl( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, void *apc
TRACE( "handle %p, code %#x, in_buffer %p, in_size %u, out_buffer %p, out_size %u\n",
handle, code, in_buffer, in_size, out_buffer, out_size );
+ /* many of the below internal codes return success but don't completely
+ * fill the iosb or signal completion; such sockopts are only called
+ * synchronously by ws2_32 */
+
switch (code)
{
case IOCTL_AFD_BIND:
@@ -2528,7 +2532,5 @@ NTSTATUS sock_ioctl( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, void *apc
if (needs_close) close( fd );
- if (status != STATUS_PENDING && !NT_ERROR(status)) io->Status = status;
-
return status;
}