ws2_32: Use saner parameter names in WSAIoctl.

This commit is contained in:
Alexandre Julliard 2011-04-19 11:34:42 +02:00
parent 1b868f4967
commit c4b67221d4

View File

@ -3064,50 +3064,43 @@ static const char *debugstr_wsaioctl(DWORD ioctl)
* WSAIoctl (WS2_32.50) * WSAIoctl (WS2_32.50)
* *
*/ */
INT WINAPI WSAIoctl(SOCKET s, INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID out_buff,
DWORD dwIoControlCode, DWORD out_size, LPDWORD ret_size, LPWSAOVERLAPPED overlapped,
LPVOID lpvInBuffer, LPWSAOVERLAPPED_COMPLETION_ROUTINE completion )
DWORD cbInBuffer,
LPVOID lpbOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
{ {
TRACE("%ld, 0x%08x, %p, %d, %p, %d, %p, %p, %p\n", TRACE("%ld, 0x%08x, %p, %d, %p, %d, %p, %p, %p\n",
s, dwIoControlCode, lpvInBuffer, cbInBuffer, lpbOutBuffer, s, code, in_buff, in_size, out_buff, out_size, ret_size, overlapped, completion);
cbOutBuffer, lpcbBytesReturned, lpOverlapped, lpCompletionRoutine);
switch( dwIoControlCode ) switch (code)
{ {
case WS_FIONBIO: case WS_FIONBIO:
if (cbInBuffer != sizeof(WS_u_long)) { if (in_size != sizeof(WS_u_long)) {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return WS_ioctlsocket( s, WS_FIONBIO, lpvInBuffer); return WS_ioctlsocket( s, WS_FIONBIO, in_buff);
case WS_FIONREAD: case WS_FIONREAD:
if (cbOutBuffer != sizeof(WS_u_long)) { if (out_size != sizeof(WS_u_long)) {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return WS_ioctlsocket( s, WS_FIONREAD, lpbOutBuffer); return WS_ioctlsocket( s, WS_FIONREAD, out_buff);
case WS_SIO_GET_INTERFACE_LIST: case WS_SIO_GET_INTERFACE_LIST:
{ {
INTERFACE_INFO* intArray = (INTERFACE_INFO*)lpbOutBuffer; INTERFACE_INFO* intArray = out_buff;
DWORD size, numInt, apiReturn; DWORD size, numInt, apiReturn;
int fd; int fd;
TRACE("-> SIO_GET_INTERFACE_LIST request\n"); TRACE("-> SIO_GET_INTERFACE_LIST request\n");
if (!lpbOutBuffer) if (!out_buff)
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
if (!lpcbBytesReturned) if (!ret_size)
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
@ -3131,9 +3124,9 @@ INT WINAPI WSAIoctl(SOCKET s,
{ {
PIP_ADAPTER_INFO ptr; PIP_ADAPTER_INFO ptr;
if (size*sizeof(INTERFACE_INFO)/sizeof(IP_ADAPTER_INFO) > cbOutBuffer) if (size*sizeof(INTERFACE_INFO)/sizeof(IP_ADAPTER_INFO) > out_size)
{ {
WARN("Buffer too small = %u, cbOutBuffer = %u\n", size, cbOutBuffer); WARN("Buffer too small = %u, out_size = %u\n", size, out_size);
HeapFree(GetProcessHeap(),0,table); HeapFree(GetProcessHeap(),0,table);
release_sock_fd( s, fd ); release_sock_fd( s, fd );
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
@ -3218,7 +3211,7 @@ INT WINAPI WSAIoctl(SOCKET s,
return SOCKET_ERROR; return SOCKET_ERROR;
} }
/* Calculate the size of the array being returned */ /* Calculate the size of the array being returned */
*lpcbBytesReturned = sizeof(INTERFACE_INFO) * numInt; *ret_size = sizeof(INTERFACE_INFO) * numInt;
release_sock_fd( s, fd ); release_sock_fd( s, fd );
break; break;
} }
@ -3235,7 +3228,7 @@ INT WINAPI WSAIoctl(SOCKET s,
TRACE("-> SIO_ADDRESS_LIST_QUERY request\n"); TRACE("-> SIO_ADDRESS_LIST_QUERY request\n");
if (!lpcbBytesReturned) if (!ret_size)
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
@ -3258,20 +3251,20 @@ INT WINAPI WSAIoctl(SOCKET s,
need = sizeof(SOCKET_ADDRESS_LIST) + sizeof(SOCKET_ADDRESS) * (num - 1); need = sizeof(SOCKET_ADDRESS_LIST) + sizeof(SOCKET_ADDRESS) * (num - 1);
need += sizeof(SOCKADDR) * num; need += sizeof(SOCKADDR) * num;
*lpcbBytesReturned = need; *ret_size = need;
if (need > cbOutBuffer) if (need > out_size)
{ {
HeapFree(GetProcessHeap(), 0, table); HeapFree(GetProcessHeap(), 0, table);
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
if (lpbOutBuffer) if (out_buff)
{ {
unsigned int i; unsigned int i;
SOCKET_ADDRESS *sa; SOCKET_ADDRESS *sa;
SOCKET_ADDRESS_LIST *sa_list = (SOCKET_ADDRESS_LIST *)lpbOutBuffer; SOCKET_ADDRESS_LIST *sa_list = out_buff;
SOCKADDR_IN *sockaddr; SOCKADDR_IN *sockaddr;
sa = sa_list->Address; sa = sa_list->Address;
@ -3317,44 +3310,44 @@ INT WINAPI WSAIoctl(SOCKET s,
static const GUID wsarecvmsg_guid = WSAID_WSARECVMSG; static const GUID wsarecvmsg_guid = WSAID_WSARECVMSG;
static const GUID wsasendmsg_guid = WSAID_WSASENDMSG; static const GUID wsasendmsg_guid = WSAID_WSASENDMSG;
if ( IsEqualGUID(&connectex_guid, lpvInBuffer) ) if ( IsEqualGUID(&connectex_guid, in_buff) )
{ {
*(LPFN_CONNECTEX *)lpbOutBuffer = WS2_ConnectEx; *(LPFN_CONNECTEX *)out_buff = WS2_ConnectEx;
return 0; return 0;
} }
else if ( IsEqualGUID(&disconnectex_guid, lpvInBuffer) ) else if ( IsEqualGUID(&disconnectex_guid, in_buff) )
{ {
FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented DisconnectEx\n"); FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented DisconnectEx\n");
} }
else if ( IsEqualGUID(&acceptex_guid, lpvInBuffer) ) else if ( IsEqualGUID(&acceptex_guid, in_buff) )
{ {
*(LPFN_ACCEPTEX *)lpbOutBuffer = WS2_AcceptEx; *(LPFN_ACCEPTEX *)out_buff = WS2_AcceptEx;
return 0; return 0;
} }
else if ( IsEqualGUID(&getaccepexsockaddrs_guid, lpvInBuffer) ) else if ( IsEqualGUID(&getaccepexsockaddrs_guid, in_buff) )
{ {
*(LPFN_GETACCEPTEXSOCKADDRS *)lpbOutBuffer = WS2_GetAcceptExSockaddrs; *(LPFN_GETACCEPTEXSOCKADDRS *)out_buff = WS2_GetAcceptExSockaddrs;
return 0; return 0;
} }
else if ( IsEqualGUID(&transmitfile_guid, lpvInBuffer) ) else if ( IsEqualGUID(&transmitfile_guid, in_buff) )
{ {
FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented TransmitFile\n"); FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented TransmitFile\n");
} }
else if ( IsEqualGUID(&transmitpackets_guid, lpvInBuffer) ) else if ( IsEqualGUID(&transmitpackets_guid, in_buff) )
{ {
FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented TransmitPackets\n"); FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented TransmitPackets\n");
} }
else if ( IsEqualGUID(&wsarecvmsg_guid, lpvInBuffer) ) else if ( IsEqualGUID(&wsarecvmsg_guid, in_buff) )
{ {
*(LPFN_WSARECVMSG *)lpbOutBuffer = WS2_WSARecvMsg; *(LPFN_WSARECVMSG *)out_buff = WS2_WSARecvMsg;
return 0; return 0;
} }
else if ( IsEqualGUID(&wsasendmsg_guid, lpvInBuffer) ) else if ( IsEqualGUID(&wsasendmsg_guid, in_buff) )
{ {
FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented WSASendMsg\n"); FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented WSASendMsg\n");
} }
else else
FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER %s: stub\n", debugstr_guid(lpvInBuffer)); FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER %s: stub\n", debugstr_guid(in_buff));
WSASetLastError(WSAEOPNOTSUPP); WSASetLastError(WSAEOPNOTSUPP);
return SOCKET_ERROR; return SOCKET_ERROR;
@ -3363,12 +3356,12 @@ INT WINAPI WSAIoctl(SOCKET s,
case WS_SIO_KEEPALIVE_VALS: case WS_SIO_KEEPALIVE_VALS:
{ {
int fd; int fd;
struct tcp_keepalive *k = lpvInBuffer; struct tcp_keepalive *k = in_buff;
int keepalive = k->onoff ? 1 : 0; int keepalive = k->onoff ? 1 : 0;
int keepidle = k->keepalivetime / 1000; int keepidle = k->keepalivetime / 1000;
int keepintvl = k->keepaliveinterval / 1000; int keepintvl = k->keepaliveinterval / 1000;
if (!lpvInBuffer) if (!in_buff)
{ {
WSASetLastError(WSAEINVAL); WSASetLastError(WSAEINVAL);
return SOCKET_ERROR; return SOCKET_ERROR;
@ -3405,31 +3398,31 @@ INT WINAPI WSAIoctl(SOCKET s,
} }
case WS_SIO_ROUTING_INTERFACE_QUERY: case WS_SIO_ROUTING_INTERFACE_QUERY:
{ {
struct WS_sockaddr *daddr = (struct WS_sockaddr *)lpvInBuffer; struct WS_sockaddr *daddr = (struct WS_sockaddr *)in_buff;
struct WS_sockaddr_in *daddr_in = (struct WS_sockaddr_in *)daddr; struct WS_sockaddr_in *daddr_in = (struct WS_sockaddr_in *)daddr;
struct WS_sockaddr_in *saddr_in = (struct WS_sockaddr_in *)lpbOutBuffer; struct WS_sockaddr_in *saddr_in = out_buff;
MIB_IPFORWARDROW row; MIB_IPFORWARDROW row;
PMIB_IPADDRTABLE ipAddrTable = NULL; PMIB_IPADDRTABLE ipAddrTable = NULL;
DWORD size, i, found_index; DWORD size, i, found_index;
TRACE("-> WS_SIO_ROUTING_INTERFACE_QUERY request\n"); TRACE("-> WS_SIO_ROUTING_INTERFACE_QUERY request\n");
if (!lpvInBuffer) if (!in_buff)
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
if (cbInBuffer < sizeof(struct WS_sockaddr)) if (in_size < sizeof(struct WS_sockaddr))
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
if (!lpbOutBuffer) if (!out_buff)
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
if (!lpcbBytesReturned) if (!ret_size)
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
@ -3440,7 +3433,7 @@ INT WINAPI WSAIoctl(SOCKET s,
WSASetLastError(WSAEAFNOSUPPORT); WSASetLastError(WSAEAFNOSUPPORT);
return SOCKET_ERROR; return SOCKET_ERROR;
} }
if (cbOutBuffer < sizeof(struct WS_sockaddr_in)) if (out_size < sizeof(struct WS_sockaddr_in))
{ {
WSASetLastError(WSAEFAULT); WSASetLastError(WSAEFAULT);
return SOCKET_ERROR; return SOCKET_ERROR;
@ -3479,7 +3472,7 @@ INT WINAPI WSAIoctl(SOCKET s,
saddr_in->sin_family = AF_INET; saddr_in->sin_family = AF_INET;
saddr_in->sin_addr.S_un.S_addr = ipAddrTable->table[found_index].dwAddr; saddr_in->sin_addr.S_un.S_addr = ipAddrTable->table[found_index].dwAddr;
saddr_in->sin_port = 0; saddr_in->sin_port = 0;
*lpcbBytesReturned = sizeof(struct WS_sockaddr_in); *ret_size = sizeof(struct WS_sockaddr_in);
HeapFree(GetProcessHeap(), 0, ipAddrTable); HeapFree(GetProcessHeap(), 0, ipAddrTable);
return 0; return 0;
} }
@ -3491,8 +3484,7 @@ INT WINAPI WSAIoctl(SOCKET s,
FIXME("WS_SIO_UDP_CONNRESET stub\n"); FIXME("WS_SIO_UDP_CONNRESET stub\n");
break; break;
default: default:
FIXME("unsupported WS_IOCTL cmd (%s)\n", FIXME("unsupported WS_IOCTL cmd (%s)\n", debugstr_wsaioctl(code));
debugstr_wsaioctl(dwIoControlCode));
WSASetLastError(WSAEOPNOTSUPP); WSASetLastError(WSAEOPNOTSUPP);
return SOCKET_ERROR; return SOCKET_ERROR;
} }