diff --git a/reactos/lib/ws2_32/misc/ns.c b/reactos/lib/ws2_32/misc/ns.c index 8ad5ed1be50..2d6e3aed7a1 100644 --- a/reactos/lib/ws2_32/misc/ns.c +++ b/reactos/lib/ws2_32/misc/ns.c @@ -320,12 +320,37 @@ WSAStringToAddressA( OUT LPSOCKADDR lpAddress, IN OUT LPINT lpAddressLength) { - UNIMPLEMENTED + INT ret, len; + LPWSTR szTemp; + LPWSAPROTOCOL_INFOW lpProtoInfoW = NULL; - return 0; + len = MultiByteToWideChar( CP_ACP, 0, AddressString, -1, NULL, 0 ); + szTemp = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, AddressString, -1, szTemp, len ); + + if (lpProtocolInfo) + { + len = WSAPROTOCOL_LEN+1; + lpProtoInfoW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + + memcpy( lpProtoInfoW, lpProtocolInfo, sizeof(LPWSAPROTOCOL_INFOA)); + + MultiByteToWideChar( CP_ACP, 0, lpProtocolInfo->szProtocol, -1, lpProtoInfoW->szProtocol, len ); + } + + ret = WSAStringToAddressW(szTemp, AddressFamily, lpProtoInfoW, lpAddress, lpAddressLength); + + HeapFree( GetProcessHeap(), 0, szTemp ); + + if (lpProtocolInfo) + HeapFree( GetProcessHeap(), 0, lpProtoInfoW ); + + WSASetLastError(ret); + return ret; } + /* * @implement */