Module: wine Branch: master Commit: 85230942e8fef89a964d373ea9bd0c8c1bfafa7e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=85230942e8fef89a964d373e...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Oct 3 11:46:11 2006 +0200
ws2_32: Avoid retrieving the fd twice in WSAIoctl.
---
dlls/ws2_32/socket.c | 35 +++++++++-------------------------- 1 files changed, 9 insertions(+), 26 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 37a1de7..59b50b9 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -2113,11 +2113,6 @@ INT WINAPI WSAIoctl(SOCKET s, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) { - int fd = get_sock_fd( s, 0, NULL ); - INT ret; - - if (fd == -1) return SOCKET_ERROR; - TRACE("%d, 0x%08lx, %p, %ld, %p, %ld, %p, %p, %p\n", s, dwIoControlCode, lpvInBuffer, cbInBuffer, lpbOutBuffer, cbOutBuffer, lpcbBytesReturned, lpOverlapped, lpCompletionRoutine); @@ -2126,50 +2121,40 @@ INT WINAPI WSAIoctl(SOCKET s, { case WS_FIONBIO: if (cbInBuffer != sizeof(u_long)) { - release_sock_fd( s, fd ); WSASetLastError(WSAEFAULT); return SOCKET_ERROR; } - ret = WS_ioctlsocket( s, WS_FIONBIO, lpvInBuffer); - if (ret == SOCKET_ERROR) { - release_sock_fd( s, fd ); - /* last error already set by WS_ioctlsocket */ - return ret; - } - break; + return WS_ioctlsocket( s, WS_FIONBIO, lpvInBuffer); + case WS_FIONREAD: if (cbOutBuffer != sizeof(u_long)) { - release_sock_fd( s, fd ); WSASetLastError(WSAEFAULT); return SOCKET_ERROR; } - ret = WS_ioctlsocket( s, WS_FIONREAD, lpbOutBuffer); - if (ret == SOCKET_ERROR) { - release_sock_fd( s, fd ); - /* last error already set by WS_ioctlsocket */ - return ret; - } - break; + return WS_ioctlsocket( s, WS_FIONREAD, lpbOutBuffer); + case SIO_GET_INTERFACE_LIST: { INTERFACE_INFO* intArray = (INTERFACE_INFO*)lpbOutBuffer; DWORD size, numInt, apiReturn; + int fd;
TRACE("-> SIO_GET_INTERFACE_LIST request\n");
if (!lpbOutBuffer) { - release_sock_fd( s, fd ); WSASetLastError(WSAEFAULT); return SOCKET_ERROR; } if (!lpcbBytesReturned) { - release_sock_fd( s, fd ); WSASetLastError(WSAEFAULT); return SOCKET_ERROR; }
+ fd = get_sock_fd( s, 0, NULL ); + if (fd == -1) return SOCKET_ERROR; + apiReturn = GetAdaptersInfo(NULL, &size); if (apiReturn == ERROR_NO_DATA) { @@ -2273,6 +2258,7 @@ #endif } /* Calculate the size of the array being returned */ *lpcbBytesReturned = sizeof(INTERFACE_INFO) * numInt; + release_sock_fd( s, fd ); break; }
@@ -2288,13 +2274,10 @@ #endif
default: FIXME("unsupported WS_IOCTL cmd (%08lx)\n", dwIoControlCode); - release_sock_fd( s, fd ); WSASetLastError(WSAEOPNOTSUPP); return SOCKET_ERROR; }
- /* Function executed with no errors */ - release_sock_fd( s, fd ); return 0; }