Alexandre Julliard : ws2_32: Avoid retrieving the fd twice in WSAIoctl.
Module: wine Branch: master Commit: 85230942e8fef89a964d373ea9bd0c8c1bfafa7e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=85230942e8fef89a964d373e... Author: Alexandre Julliard <julliard(a)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; }
participants (1)
-
Alexandre Julliard