[PATCH 4/5] ws2_32/tests: Move address/string conversion tests to protocol.c.
Zebediah Figura
z.figura12 at gmail.com
Wed Apr 28 16:26:33 CDT 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/ws2_32/tests/protocol.c | 631 +++++++++++++++++++++++++++++++++
dlls/ws2_32/tests/sock.c | 659 -----------------------------------
2 files changed, 631 insertions(+), 659 deletions(-)
diff --git a/dlls/ws2_32/tests/protocol.c b/dlls/ws2_32/tests/protocol.c
index 55355b819a3..3bb5b83f759 100644
--- a/dlls/ws2_32/tests/protocol.c
+++ b/dlls/ws2_32/tests/protocol.c
@@ -20,6 +20,8 @@
#include <stdarg.h>
+#include <ntstatus.h>
+#define WIN32_NO_STATUS
#include <windef.h>
#include <winbase.h>
#include <winsock2.h>
@@ -37,6 +39,9 @@ static int (WINAPI *pGetAddrInfoExW)(const WCHAR *name, const WCHAR *servname, D
static int (WINAPI *pGetAddrInfoExOverlappedResult)(OVERLAPPED *overlapped);
static int (WINAPI *pGetHostNameW)(WCHAR *name, int len);
static const char *(WINAPI *p_inet_ntop)(int family, void *addr, char *string, ULONG size);
+static const WCHAR *(WINAPI *pInetNtopW)(int family, void *addr, WCHAR *string, ULONG size);
+static int (WINAPI *p_inet_pton)(int family, const char *string, void *addr);
+static int (WINAPI *pInetPtonW)(int family, WCHAR *string, void *addr);
/* TCP and UDP over IP fixed set of service flags */
#define TCPIP_SERVICE_FLAGS (XP1_GUARANTEED_DELIVERY \
@@ -622,6 +627,622 @@ static void test_WSAAsyncGetServByName(void)
DestroyWindow(hwnd);
}
+static DWORD WINAPI inet_ntoa_thread_proc(void *param)
+{
+ ULONG addr;
+ const char *str;
+ HANDLE *event = param;
+
+ addr = inet_addr("4.3.2.1");
+ ok(addr == htonl(0x04030201), "expected 0x04030201, got %08x\n", addr);
+ str = inet_ntoa(*(struct in_addr *)&addr);
+ ok(!strcmp(str, "4.3.2.1"), "expected 4.3.2.1, got %s\n", str);
+
+ SetEvent(event[0]);
+ WaitForSingleObject(event[1], 3000);
+
+ return 0;
+}
+
+static void test_inet_ntoa(void)
+{
+ ULONG addr;
+ const char *str;
+ HANDLE thread, event[2];
+ DWORD tid;
+
+ addr = inet_addr("1.2.3.4");
+ ok(addr == htonl(0x01020304), "expected 0x01020304, got %08x\n", addr);
+ str = inet_ntoa(*(struct in_addr *)&addr);
+ ok(!strcmp(str, "1.2.3.4"), "expected 1.2.3.4, got %s\n", str);
+
+ event[0] = CreateEventW(NULL, TRUE, FALSE, NULL);
+ event[1] = CreateEventW(NULL, TRUE, FALSE, NULL);
+
+ thread = CreateThread(NULL, 0, inet_ntoa_thread_proc, event, 0, &tid);
+ WaitForSingleObject(event[0], 3000);
+
+ ok(!strcmp(str, "1.2.3.4"), "expected 1.2.3.4, got %s\n", str);
+
+ SetEvent(event[1]);
+ WaitForSingleObject(thread, 3000);
+
+ CloseHandle(event[0]);
+ CloseHandle(event[1]);
+ CloseHandle(thread);
+}
+
+static void test_inet_pton(void)
+{
+ static const struct
+ {
+ int family, ret;
+ DWORD err;
+ const char *printable, *collapsed, *raw_data;
+ }
+ tests[] =
+ {
+ /* 0 */
+ {AF_UNSPEC, -1, WSAEFAULT, NULL, NULL, NULL},
+ {AF_INET, -1, WSAEFAULT, NULL, NULL, NULL},
+ {AF_INET6, -1, WSAEFAULT, NULL, NULL, NULL},
+ {AF_UNSPEC, -1, WSAEAFNOSUPPORT, "127.0.0.1", NULL, NULL},
+ {AF_INET, 1, 0, "127.0.0.1", "127.0.0.1", "\x7f\x00\x00\x01"},
+ {AF_INET6, 0, 0, "127.0.0.1", "127.0.0.1", NULL},
+ {AF_INET, 0, 0, "::1/128", NULL, NULL},
+ {AF_INET6, 0, 0, "::1/128", NULL, NULL},
+ {AF_UNSPEC, -1, WSAEAFNOSUPPORT, "broken", NULL, NULL},
+ {AF_INET, 0, 0, "broken", NULL, NULL},
+ /* 10 */
+ {AF_INET6, 0, 0, "broken", NULL, NULL},
+ {AF_UNSPEC, -1, WSAEAFNOSUPPORT, "177.32.45.20", NULL, NULL},
+ {AF_INET, 1, 0, "177.32.45.20", "177.32.45.20", "\xb1\x20\x2d\x14"},
+ {AF_INET6, 0, 0, "177.32.45.20", NULL, NULL},
+ {AF_INET, 0, 0, "2607:f0d0:1002:51::4", NULL, NULL},
+ {AF_INET6, 1, 0, "2607:f0d0:1002:51::4", "2607:f0d0:1002:51::4",
+ "\x26\x07\xf0\xd0\x10\x02\x00\x51\x00\x00\x00\x00\x00\x00\x00\x04"},
+ {AF_INET, 0, 0, "::177.32.45.20", NULL, NULL},
+ {AF_INET6, 1, 0, "::177.32.45.20", "::177.32.45.20",
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x20\x2d\x14"},
+ {AF_INET, 0, 0, "fe80::0202:b3ff:fe1e:8329", NULL, NULL},
+ {AF_INET6, 1, 0, "fe80::0202:b3ff:fe1e:8329", "fe80::202:b3ff:fe1e:8329",
+ "\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x02\xb3\xff\xfe\x1e\x83\x29"},
+ /* 20 */
+ {AF_INET6, 1, 0, "fe80::202:b3ff:fe1e:8329", "fe80::202:b3ff:fe1e:8329",
+ "\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x02\xb3\xff\xfe\x1e\x83\x29"},
+ {AF_INET, 0, 0, "a", NULL, NULL},
+ {AF_INET, 0, 0, "a.b", NULL, NULL},
+ {AF_INET, 0, 0, "a.b.c", NULL, NULL},
+ {AF_INET, 0, 0, "a.b.c.d", NULL, NULL},
+ {AF_INET6, 1, 0, "2001:cdba:0000:0000:0000:0000:3257:9652", "2001:cdba::3257:9652",
+ "\x20\x01\xcd\xba\x00\x00\x00\x00\x00\x00\x00\x00\x32\x57\x96\x52"},
+ {AF_INET6, 1, 0, "2001:cdba::3257:9652", "2001:cdba::3257:9652",
+ "\x20\x01\xcd\xba\x00\x00\x00\x00\x00\x00\x00\x00\x32\x57\x96\x52"},
+ {AF_INET6, 1, 0, "2001:cdba:0:0:0:0:3257:9652", "2001:cdba::3257:9652",
+ "\x20\x01\xcd\xba\x00\x00\x00\x00\x00\x00\x00\x00\x32\x57\x96\x52"},
+ {AF_INET, 0, 0, "0x12345678", NULL, NULL},
+ {AF_INET6, 0, 0, "::1:2:3:4:5:6:7", NULL, NULL}, /* windows bug */
+ /* 30 */
+ {AF_INET6, 1, 0, "::5efe:1.2.3.4", "::5efe:1.2.3.4",
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\xfe\x01\x02\x03\x04"},
+ {AF_INET6, 1, 0, "::ffff:0:1.2.3.4", "::ffff:0:1.2.3.4",
+ "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x02\x03\x04"},
+ };
+ int i, ret;
+ DWORD err;
+ char buffer[64],str[64];
+ WCHAR printableW[64], collapsedW[64];
+ const char *ptr;
+ const WCHAR *ptrW;
+
+ /* inet_ntop and inet_pton became available in Vista and Win2008 */
+ if (!p_inet_ntop)
+ {
+ win_skip("inet_ntop is not available\n");
+ return;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(tests); i++)
+ {
+ WSASetLastError(0xdeadbeef);
+ ret = p_inet_pton(tests[i].family, tests[i].printable, buffer);
+ ok(ret == tests[i].ret, "Test [%d]: Expected %d, got %d\n", i, tests[i].ret, ret);
+ err = WSAGetLastError();
+ if (tests[i].ret == -1)
+ ok(tests[i].err == err, "Test [%d]: Expected 0x%x, got 0x%x\n", i, tests[i].err, err);
+ else
+ ok(err == 0xdeadbeef, "Test [%d]: Expected 0xdeadbeef, got 0x%x\n", i, err);
+ if (tests[i].ret != 1) continue;
+ ok(memcmp(buffer, tests[i].raw_data,
+ tests[i].family == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)) == 0,
+ "Test [%d]: Expected binary data differs\n", i);
+
+ /* Test the result from Pton with Ntop */
+ strcpy (str, "deadbeef");
+ ptr = p_inet_ntop(tests[i].family, buffer, str, sizeof(str));
+ ok(ptr != NULL, "Test [%d]: Failed with NULL\n", i);
+ ok(ptr == str, "Test [%d]: Pointers differ (%p != %p)\n", i, ptr, str);
+ ok(strcmp(ptr, tests[i].collapsed) == 0, "Test [%d]: Expected '%s', got '%s'\n",
+ i, tests[i].collapsed, ptr);
+ }
+
+ for (i = 0; i < ARRAY_SIZE(tests); i++)
+ {
+ if (tests[i].printable)
+ MultiByteToWideChar(CP_ACP, 0, tests[i].printable, -1, printableW, ARRAY_SIZE(printableW));
+ WSASetLastError(0xdeadbeef);
+ ret = pInetPtonW(tests[i].family, tests[i].printable ? printableW : NULL, buffer);
+ ok(ret == tests[i].ret, "Test [%d]: Expected %d, got %d\n", i, tests[i].ret, ret);
+ err = WSAGetLastError();
+ if (tests[i].ret == -1)
+ ok(tests[i].err == err, "Test [%d]: Expected 0x%x, got 0x%x\n", i, tests[i].err, err);
+ else if (tests[i].ret == 0)
+ ok(err == WSAEINVAL || broken(err == 0xdeadbeef) /* win2008 */,
+ "Test [%d]: Expected WSAEINVAL, got 0x%x\n", i, err);
+ else
+ ok(err == 0xdeadbeef, "Test [%d]: Expected 0xdeadbeef, got 0x%x\n", i, err);
+ if (tests[i].ret != 1) continue;
+ ok(memcmp(buffer, tests[i].raw_data,
+ tests[i].family == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)) == 0,
+ "Test [%d]: Expected binary data differs\n", i);
+
+ /* Test the result from Pton with Ntop */
+ printableW[0] = 0xdead;
+ ptrW = pInetNtopW(tests[i].family, buffer, printableW, ARRAY_SIZE(printableW));
+ ok(ptrW != NULL, "Test [%d]: Failed with NULL\n", i);
+ ok(ptrW == printableW, "Test [%d]: Pointers differ (%p != %p)\n", i, ptrW, printableW);
+
+ MultiByteToWideChar(CP_ACP, 0, tests[i].collapsed, -1, collapsedW, ARRAY_SIZE(collapsedW));
+ ok(!wcscmp(ptrW, collapsedW), "Test [%d]: Expected '%s', got '%s'\n",
+ i, tests[i].collapsed, wine_dbgstr_w(ptrW));
+ }
+}
+
+static void test_addr_to_print(void)
+{
+ char dst[16];
+ char dst6[64];
+ const char *pdst;
+ struct in_addr in;
+ struct in6_addr in6;
+
+ u_long addr0_Num = 0x00000000;
+ const char *addr0_Str = "0.0.0.0";
+ u_long addr1_Num = 0x20201015;
+ const char *addr1_Str = "21.16.32.32";
+ u_char addr2_Num[16] = {0,0,0,0,0,0,0,0,0,0,0xff,0xfe,0xcC,0x98,0xbd,0x74};
+ const char *addr2_Str = "::fffe:cc98:bd74";
+ u_char addr3_Num[16] = {0x20,0x30,0xa4,0xb1};
+ const char *addr3_Str = "2030:a4b1::";
+ u_char addr4_Num[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0xcC,0x98,0xbd,0x74};
+ const char *addr4_Str = "::204.152.189.116";
+
+ /* Test IPv4 addresses */
+ in.s_addr = addr0_Num;
+
+ pdst = inet_ntoa(*((struct in_addr *)&in.s_addr));
+ ok(pdst != NULL, "inet_ntoa failed %s\n", dst);
+ ok(!strcmp(pdst, addr0_Str),"Address %s != %s\n", pdst, addr0_Str);
+
+ /* Test that inet_ntoa and inet_ntop return the same value */
+ in.S_un.S_addr = addr1_Num;
+ pdst = inet_ntoa(*((struct in_addr *)&in.s_addr));
+ ok(pdst != NULL, "inet_ntoa failed %s\n", dst);
+ ok(!strcmp(pdst, addr1_Str),"Address %s != %s\n", pdst, addr1_Str);
+
+ /* inet_ntop became available in Vista and Win2008 */
+ if (!p_inet_ntop)
+ {
+ win_skip("InetNtop not present, not executing tests\n");
+ return;
+ }
+
+ /* Second part of test */
+ pdst = p_inet_ntop(AF_INET, &in.s_addr, dst, sizeof(dst));
+ ok(pdst != NULL, "InetNtop failed %s\n", dst);
+ ok(!strcmp(pdst, addr1_Str),"Address %s != %s\n", pdst, addr1_Str);
+
+ /* Test invalid parm conditions */
+ pdst = p_inet_ntop(1, (void *)&in.s_addr, dst, sizeof(dst));
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == WSAEAFNOSUPPORT, "Should be WSAEAFNOSUPPORT\n");
+
+ /* Test Null destination */
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET, &in.s_addr, NULL, sizeof(dst));
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
+ "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
+
+ /* Test zero length passed */
+ WSASetLastError(0);
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET, &in.s_addr, dst, 0);
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
+ "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
+
+ /* Test length one shorter than the address length */
+ WSASetLastError(0);
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET, &in.s_addr, dst, 6);
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
+ "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
+
+ /* Test longer length is ok */
+ WSASetLastError(0);
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET, &in.s_addr, dst, sizeof(dst)+1);
+ ok(pdst != NULL, "The pointer should be returned (%p)\n", pdst);
+ ok(!strcmp(pdst, addr1_Str),"Address %s != %s\n", pdst, addr1_Str);
+
+ /* Test the IPv6 addresses */
+
+ /* Test an zero prefixed IPV6 address */
+ memcpy(in6.u.Byte, addr2_Num, sizeof(addr2_Num));
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, dst6, sizeof(dst6));
+ ok(pdst != NULL, "InetNtop failed %s\n", dst6);
+ ok(!strcmp(pdst, addr2_Str),"Address %s != %s\n", pdst, addr2_Str);
+
+ /* Test an zero suffixed IPV6 address */
+ memcpy(in6.s6_addr, addr3_Num, sizeof(addr3_Num));
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, dst6, sizeof(dst6));
+ ok(pdst != NULL, "InetNtop failed %s\n", dst6);
+ ok(!strcmp(pdst, addr3_Str),"Address %s != %s\n", pdst, addr3_Str);
+
+ /* Test the IPv6 address contains the IPv4 address in IPv4 notation */
+ memcpy(in6.s6_addr, addr4_Num, sizeof(addr4_Num));
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, dst6, sizeof(dst6));
+ ok(pdst != NULL, "InetNtop failed %s\n", dst6);
+ ok(!strcmp(pdst, addr4_Str),"Address %s != %s\n", pdst, addr4_Str);
+
+ /* Test invalid parm conditions */
+ memcpy(in6.u.Byte, addr2_Num, sizeof(addr2_Num));
+
+ /* Test Null destination */
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, NULL, sizeof(dst6));
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
+ "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
+
+ /* Test zero length passed */
+ WSASetLastError(0);
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, dst6, 0);
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
+ "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
+
+ /* Test length one shorter than the address length */
+ WSASetLastError(0);
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, dst6, 16);
+ ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
+ ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
+ "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
+
+ /* Test longer length is ok */
+ WSASetLastError(0);
+ pdst = NULL;
+ pdst = p_inet_ntop(AF_INET6, &in6.s6_addr, dst6, 18);
+ ok(pdst != NULL, "The pointer should be returned (%p)\n", pdst);
+}
+
+static void test_WSAAddressToString(void)
+{
+ static struct
+ {
+ ULONG address;
+ USHORT port;
+ char output[32];
+ }
+ ipv4_tests[] =
+ {
+ { 0, 0, "0.0.0.0" },
+ { 0xffffffff, 0, "255.255.255.255" },
+ { 0, 0xffff, "0.0.0.0:65535" },
+ { 0xffffffff, 0xffff, "255.255.255.255:65535" },
+ };
+ static struct
+ {
+ USHORT address[8];
+ ULONG scope;
+ USHORT port;
+ char output[64];
+ }
+ ipv6_tests[] =
+ {
+ { { 0, 0, 0, 0, 0, 0, 0, 0x100 }, 0, 0, "::1" },
+ { { 0xab20, 0, 0, 0, 0, 0, 0, 0x100 }, 0, 0, "20ab::1" },
+ { { 0xab20, 0, 0, 0, 0, 0, 0, 0x120 }, 0, 0xfa81, "[20ab::2001]:33274" },
+ { { 0xab20, 0, 0, 0, 0, 0, 0, 0x120 }, 0x1234, 0xfa81, "[20ab::2001%4660]:33274" },
+ { { 0xab20, 0, 0, 0, 0, 0, 0, 0x120 }, 0x1234, 0, "20ab::2001%4660" },
+ };
+ SOCKADDR_IN sockaddr;
+ SOCKADDR_IN6 sockaddr6;
+ char output[64];
+ WCHAR outputW[64], expected_outputW[64];
+ SOCKET v6;
+ INT ret;
+ DWORD len;
+ int i, j;
+
+ len = 0;
+ sockaddr.sin_family = AF_INET;
+ sockaddr.sin_addr.s_addr = 0;
+ sockaddr.sin_port = 0;
+ WSASetLastError( 0xdeadbeef );
+ ret = WSAAddressToStringA( (SOCKADDR *)&sockaddr, sizeof(sockaddr), NULL, output, &len );
+ ok( ret == SOCKET_ERROR, "WSAAddressToStringA() returned %d, expected SOCKET_ERROR\n", ret );
+ ok( WSAGetLastError() == WSAEFAULT, "WSAAddressToStringA() gave error %d, expected WSAEFAULT\n", WSAGetLastError() );
+ ok( len == 8, "WSAAddressToStringA() gave length %d, expected 8\n", len );
+
+ len = 0;
+ sockaddr.sin_family = AF_INET;
+ sockaddr.sin_addr.s_addr = 0;
+ sockaddr.sin_port = 0;
+ WSASetLastError( 0xdeadbeef );
+ ret = WSAAddressToStringW( (SOCKADDR *)&sockaddr, sizeof(sockaddr), NULL, NULL, &len );
+ ok( ret == SOCKET_ERROR, "got %d\n", ret );
+ ok( WSAGetLastError() == WSAEFAULT, "got %08x\n", WSAGetLastError() );
+ ok( len == 8, "got %u\n", len );
+
+ len = ARRAY_SIZE(outputW);
+ memset( outputW, 0, sizeof(outputW) );
+ ret = WSAAddressToStringW( (SOCKADDR *)&sockaddr, sizeof(sockaddr), NULL, outputW, &len );
+ ok( !ret, "WSAAddressToStringW() returned %d\n", ret );
+ ok( len == 8, "got %u\n", len );
+ ok( !wcscmp(outputW, L"0.0.0.0"), "got %s\n", wine_dbgstr_w(outputW) );
+
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < ARRAY_SIZE(ipv4_tests); j++)
+ {
+ sockaddr.sin_family = AF_INET;
+ sockaddr.sin_addr.s_addr = ipv4_tests[j].address;
+ sockaddr.sin_port = ipv4_tests[j].port;
+
+ if (i == 0)
+ {
+ len = sizeof(output);
+ memset(output, 0, len);
+ ret = WSAAddressToStringA( (SOCKADDR *)&sockaddr, sizeof(sockaddr), NULL, output, &len );
+ ok( !ret, "ipv4_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
+ ok( !strcmp( output, ipv4_tests[j].output ),
+ "ipv4_tests[%d]: got address %s, expected %s\n",
+ j, wine_dbgstr_a(output), wine_dbgstr_a(ipv4_tests[j].output) );
+ ok( len == strlen(ipv4_tests[j].output) + 1,
+ "ipv4_tests[%d]: got length %d, expected %d\n",
+ j, len, strlen(ipv4_tests[j].output) + 1 );
+ }
+ else
+ {
+ len = sizeof(outputW);
+ memset(outputW, 0, len);
+ ret = WSAAddressToStringW( (SOCKADDR *)&sockaddr, sizeof(sockaddr), NULL, outputW, &len );
+ MultiByteToWideChar( CP_ACP, 0, ipv4_tests[j].output, -1,
+ expected_outputW, ARRAY_SIZE(expected_outputW) );
+ ok( !ret, "ipv4_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
+ ok( !wcscmp( outputW, expected_outputW ),
+ "ipv4_tests[%d]: got address %s, expected %s\n",
+ j, wine_dbgstr_w(outputW), wine_dbgstr_w(expected_outputW) );
+ ok( len == wcslen(expected_outputW) + 1,
+ "ipv4_tests[%d]: got length %d, expected %d\n",
+ j, len, wcslen(expected_outputW) + 1 );
+ }
+ }
+
+ /* check to see if IPv6 is available */
+ v6 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ if (v6 == INVALID_SOCKET) {
+ skip("Could not create IPv6 socket (LastError: %d; %d expected if IPv6 not available).\n",
+ WSAGetLastError(), WSAEAFNOSUPPORT);
+ continue;
+ }
+ closesocket(v6);
+
+ for (j = 0; j < ARRAY_SIZE(ipv6_tests); j++)
+ {
+ sockaddr6.sin6_family = AF_INET6;
+ sockaddr6.sin6_scope_id = ipv6_tests[j].scope;
+ sockaddr6.sin6_port = ipv6_tests[j].port;
+ memcpy( sockaddr6.sin6_addr.s6_addr, ipv6_tests[j].address, sizeof(ipv6_tests[j].address) );
+
+ if (i == 0)
+ {
+ len = sizeof(output);
+ ret = WSAAddressToStringA( (SOCKADDR *)&sockaddr6, sizeof(sockaddr6), NULL, output, &len );
+ ok( !ret, "ipv6_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
+ ok( !strcmp( output, ipv6_tests[j].output ),
+ "ipv6_tests[%d]: gave address %s, expected %s\n",
+ j, wine_dbgstr_a(output), wine_dbgstr_a(ipv6_tests[j].output) );
+ ok( len == strlen(ipv6_tests[j].output) + 1,
+ "ipv6_tests[%d]: got length %d, expected %d\n",
+ j, len, strlen(ipv6_tests[j].output) + 1 );
+ }
+ else
+ {
+ len = sizeof(outputW);
+ ret = WSAAddressToStringW( (SOCKADDR *)&sockaddr6, sizeof(sockaddr6), NULL, outputW, &len );
+ MultiByteToWideChar( CP_ACP, 0, ipv6_tests[j].output, -1,
+ expected_outputW, ARRAY_SIZE(expected_outputW) );
+ ok( !ret, "ipv6_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
+ ok( !wcscmp( outputW, expected_outputW ),
+ "ipv6_tests[%d]: got address %s, expected %s\n",
+ j, wine_dbgstr_w(outputW), wine_dbgstr_w(expected_outputW) );
+ ok( len == wcslen(expected_outputW) + 1,
+ "ipv6_tests[%d]: got length %d, expected %d\n",
+ j, len, wcslen(expected_outputW) + 1 );
+ }
+ }
+ }
+}
+
+static void test_WSAStringToAddress(void)
+{
+ static struct
+ {
+ char input[32];
+ ULONG address;
+ USHORT port;
+ int error;
+ }
+ ipv4_tests[] =
+ {
+ { "0.0.0.0", 0 },
+ { "127.127.127.127", 0x7f7f7f7f },
+ { "255.255.255.255", 0xffffffff },
+ { "127.127.127.127:65535", 0x7f7f7f7f, 65535 },
+ { "255.255.255.255:65535", 0xffffffff, 65535 },
+ { "2001::1", 0xd1070000, 0, WSAEINVAL },
+ { "1.2.3.", 0, 0, WSAEINVAL },
+ { "", 0, 0, WSAEINVAL },
+ };
+ static struct
+ {
+ char input[64];
+ USHORT address[8];
+ USHORT port;
+ int error;
+ }
+ ipv6_tests[] =
+ {
+ { "::1", { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "[::1]", { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "[::1]:65535", { 0, 0, 0, 0, 0, 0, 0, 0x100 }, 0xffff },
+ { "2001::1", { 0x120, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "::1]:65535", { 0, 0, 0, 0, 0, 0, 0, 0x100 }, 0, WSAEINVAL },
+ { "001::1", { 0x100, 0, 0, 0, 0, 0, 0, 0x100 } },
+ { "::1:2:3:4:5:6:7", { 0, 0, 0x100, 0x200, 0x300, 0x400, 0x500, 0x600 }, 0, WSAEINVAL }, /* Windows bug */
+ { "1.2.3.4", { 0x201, 0x3, 0, 0, 0, 0, 0, 0 }, 0, WSAEINVAL },
+ { "1:2:3:", { 0x100, 0x200, 0x300, 0, 0, 0, 0 }, 0, WSAEINVAL },
+ { "", { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, WSAEINVAL },
+ };
+
+ WCHAR inputW[64];
+ INT len, ret, expected_len, expected_ret;
+ short expected_family;
+ SOCKADDR_IN sockaddr;
+ SOCKADDR_IN6 sockaddr6;
+ int i, j;
+
+ len = 0;
+ WSASetLastError( 0 );
+ ret = WSAStringToAddressA( ipv4_tests[0].input, AF_INET, NULL, (SOCKADDR *)&sockaddr, &len );
+ ok( ret == SOCKET_ERROR, "WSAStringToAddressA() returned %d, expected SOCKET_ERROR\n", ret );
+ ok( WSAGetLastError() == WSAEFAULT, "WSAStringToAddress() gave error %d, expected WSAEFAULT\n", WSAGetLastError() );
+ ok( len >= sizeof(sockaddr) || broken(len == 0) /* xp */,
+ "WSAStringToAddress() gave length %d, expected at least %d\n", len, sizeof(sockaddr) );
+
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < ARRAY_SIZE(ipv4_tests); j++)
+ {
+ len = sizeof(sockaddr) + 10;
+ expected_len = ipv4_tests[j].error ? len : sizeof(sockaddr);
+ memset( &sockaddr, 0xab, sizeof(sockaddr) );
+
+ WSASetLastError( 0 );
+ if (i == 0)
+ {
+ ret = WSAStringToAddressA( ipv4_tests[j].input, AF_INET, NULL, (SOCKADDR *)&sockaddr, &len );
+ }
+ else
+ {
+ MultiByteToWideChar( CP_ACP, 0, ipv4_tests[j].input, -1, inputW, ARRAY_SIZE(inputW) );
+ ret = WSAStringToAddressW( inputW, AF_INET, NULL, (SOCKADDR *)&sockaddr, &len );
+ }
+ expected_ret = ipv4_tests[j].error ? SOCKET_ERROR : 0;
+ expected_family = ipv4_tests[j].error ? 0 : AF_INET;
+ ok( ret == expected_ret,
+ "WSAStringToAddress(%s) returned %d, expected %d\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), ret, expected_ret );
+ ok( WSAGetLastError() == ipv4_tests[j].error,
+ "WSAStringToAddress(%s) gave error %d, expected %d\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), WSAGetLastError(), ipv4_tests[j].error );
+ ok( sockaddr.sin_family == expected_family,
+ "WSAStringToAddress(%s) gave family %d, expected %d\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), sockaddr.sin_family, expected_family );
+ ok( sockaddr.sin_addr.s_addr == ipv4_tests[j].address,
+ "WSAStringToAddress(%s) gave address %08x, expected %08x\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), sockaddr.sin_addr.s_addr, ipv4_tests[j].address );
+ ok( sockaddr.sin_port == ipv4_tests[j].port,
+ "WSAStringToAddress(%s) gave port %04x, expected %04x\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), sockaddr.sin_port, ipv4_tests[j].port );
+ ok( len == expected_len,
+ "WSAStringToAddress(%s) gave length %d, expected %d\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), len, expected_len );
+ }
+
+ for (j = 0; j < ARRAY_SIZE(ipv6_tests); j++)
+ {
+ len = sizeof(sockaddr6) + 10;
+ expected_len = ipv6_tests[j].error ? len : sizeof(sockaddr6);
+ memset( &sockaddr6, 0xab, sizeof(sockaddr6) );
+
+ WSASetLastError( 0 );
+ if (i == 0)
+ {
+ ret = WSAStringToAddressA( ipv6_tests[j].input, AF_INET6, NULL, (SOCKADDR *)&sockaddr6, &len );
+ }
+ else
+ {
+ MultiByteToWideChar( CP_ACP, 0, ipv6_tests[j].input, -1, inputW, ARRAY_SIZE(inputW) );
+ ret = WSAStringToAddressW( inputW, AF_INET6, NULL, (SOCKADDR *)&sockaddr6, &len );
+ }
+ if (j == 0 && ret == SOCKET_ERROR)
+ {
+ win_skip("IPv6 not supported\n");
+ break;
+ }
+ expected_ret = ipv6_tests[j].error ? SOCKET_ERROR : 0;
+ expected_family = ipv6_tests[j].error ? 0 : AF_INET6;
+ ok( ret == expected_ret,
+ "WSAStringToAddress(%s) returned %d, expected %d\n",
+ wine_dbgstr_a( ipv6_tests[j].input ), ret, expected_ret );
+ ok( WSAGetLastError() == ipv6_tests[j].error,
+ "WSAStringToAddress(%s) gave error %d, expected %d\n",
+ wine_dbgstr_a( ipv6_tests[j].input ), WSAGetLastError(), ipv6_tests[j].error );
+ ok( sockaddr6.sin6_family == expected_family,
+ "WSAStringToAddress(%s) gave family %d, expected %d\n",
+ wine_dbgstr_a( ipv4_tests[j].input ), sockaddr6.sin6_family, expected_family );
+ ok( memcmp(&sockaddr6.sin6_addr, ipv6_tests[j].address, sizeof(sockaddr6.sin6_addr)) == 0,
+ "WSAStringToAddress(%s) gave address %x:%x:%x:%x:%x:%x:%x:%x, expected %x:%x:%x:%x:%x:%x:%x:%x\n",
+ wine_dbgstr_a( ipv6_tests[j].input ),
+ sockaddr6.sin6_addr.s6_words[0], sockaddr6.sin6_addr.s6_words[1],
+ sockaddr6.sin6_addr.s6_words[2], sockaddr6.sin6_addr.s6_words[3],
+ sockaddr6.sin6_addr.s6_words[4], sockaddr6.sin6_addr.s6_words[5],
+ sockaddr6.sin6_addr.s6_words[6], sockaddr6.sin6_addr.s6_words[7],
+ ipv6_tests[j].address[0], ipv6_tests[j].address[1],
+ ipv6_tests[j].address[2], ipv6_tests[j].address[3],
+ ipv6_tests[j].address[4], ipv6_tests[j].address[5],
+ ipv6_tests[j].address[6], ipv6_tests[j].address[7] );
+ ok( sockaddr6.sin6_scope_id == 0,
+ "WSAStringToAddress(%s) gave scope %d, expected 0\n",
+ wine_dbgstr_a( ipv6_tests[j].input ), sockaddr6.sin6_scope_id );
+ ok( sockaddr6.sin6_port == ipv6_tests[j].port,
+ "WSAStringToAddress(%s) gave port %04x, expected %04x\n",
+ wine_dbgstr_a( ipv6_tests[j].input ), sockaddr6.sin6_port, ipv6_tests[j].port );
+ ok( sockaddr6.sin6_flowinfo == 0,
+ "WSAStringToAddress(%s) gave flowinfo %d, expected 0\n",
+ wine_dbgstr_a( ipv6_tests[j].input ), sockaddr6.sin6_flowinfo );
+ ok( len == expected_len,
+ "WSAStringToAddress(%s) gave length %d, expected %d\n",
+ wine_dbgstr_a( ipv6_tests[j].input ), len, expected_len );
+ }
+ }
+}
+
+static void test_inet_addr(void)
+{
+ u_long addr;
+
+ addr = inet_addr(NULL);
+ ok(addr == INADDR_NONE, "inet_addr succeeded unexpectedly\n");
+}
+
/* Tests used in both getaddrinfo and GetAddrInfoW */
static const struct addr_hint_tests
{
@@ -1670,6 +2291,9 @@ START_TEST( protocol )
pGetAddrInfoExW = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "GetAddrInfoExW");
pGetHostNameW = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "GetHostNameW");
p_inet_ntop = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "inet_ntop");
+ pInetNtopW = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "InetNtopW");
+ p_inet_pton = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "inet_pton");
+ pInetPtonW = (void *)GetProcAddress(GetModuleHandleA("ws2_32"), "InetPtonW");
if (WSAStartup( version, &data )) return;
@@ -1683,6 +2307,13 @@ START_TEST( protocol )
test_WSAAsyncGetServByPort();
test_WSAAsyncGetServByName();
+ test_inet_ntoa();
+ test_inet_pton();
+ test_addr_to_print();
+ test_WSAAddressToString();
+ test_WSAStringToAddress();
+ test_inet_addr();
+
test_GetAddrInfoW();
test_GetAddrInfoExW();
test_getaddrinfo();
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index bf978fedfdb..3926c9bc492 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -61,10 +61,6 @@
k.keepaliveinterval = interval;
/* Function pointers */
-static PCSTR (WINAPI *pInetNtop)(INT,LPVOID,LPSTR,ULONG);
-static PCWSTR(WINAPI *pInetNtopW)(INT,LPVOID,LPWSTR,ULONG);
-static int (WINAPI *pInetPtonA)(INT,LPCSTR,LPVOID);
-static int (WINAPI *pInetPtonW)(INT,LPWSTR,LPVOID);
static int (WINAPI *pWSAPoll)(WSAPOLLFD *,ULONG,INT);
static int (WINAPI *pWSCGetProviderInfo)(LPGUID,WSC_PROVIDER_INFO_TYPE,PBYTE,size_t*,DWORD,LPINT);
@@ -1094,10 +1090,6 @@ static void Init (void)
WSADATA data;
HMODULE hws2_32 = GetModuleHandleA("ws2_32.dll"), ntdll;
- pInetNtop = (void *)GetProcAddress(hws2_32, "inet_ntop");
- pInetNtopW = (void *)GetProcAddress(hws2_32, "InetNtopW");
- pInetPtonA = (void *)GetProcAddress(hws2_32, "inet_pton");
- pInetPtonW = (void *)GetProcAddress(hws2_32, "InetPtonW");
pWSAPoll = (void *)GetProcAddress(hws2_32, "WSAPoll");
pWSCGetProviderInfo = (void *)GetProcAddress(hws2_32, "WSCGetProviderInfo");
@@ -2709,311 +2701,6 @@ static void test_WSAEnumNetworkEvents(void)
}
}
-static void test_WSAAddressToString(void)
-{
- static struct
- {
- ULONG address;
- USHORT port;
- char output[32];
- }
- ipv4_tests[] =
- {
- { 0, 0, "0.0.0.0" },
- { 0xffffffff, 0, "255.255.255.255" },
- { 0, 0xffff, "0.0.0.0:65535" },
- { 0xffffffff, 0xffff, "255.255.255.255:65535" },
- };
- static struct
- {
- USHORT address[8];
- ULONG scope;
- USHORT port;
- char output[64];
- }
- ipv6_tests[] =
- {
- { { 0, 0, 0, 0, 0, 0, 0, 0x100 }, 0, 0, "::1" },
- { { 0xab20, 0, 0, 0, 0, 0, 0, 0x100 }, 0, 0, "20ab::1" },
- { { 0xab20, 0, 0, 0, 0, 0, 0, 0x120 }, 0, 0xfa81, "[20ab::2001]:33274" },
- { { 0xab20, 0, 0, 0, 0, 0, 0, 0x120 }, 0x1234, 0xfa81, "[20ab::2001%4660]:33274" },
- { { 0xab20, 0, 0, 0, 0, 0, 0, 0x120 }, 0x1234, 0, "20ab::2001%4660" },
- };
- SOCKADDR_IN sockaddr;
- SOCKADDR_IN6 sockaddr6;
- char output[64];
- WCHAR outputW[64], expected_outputW[64];
- SOCKET v6;
- INT ret;
- DWORD len;
- int i, j;
-
- len = 0;
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_addr.s_addr = 0;
- sockaddr.sin_port = 0;
- WSASetLastError( 0xdeadbeef );
- ret = WSAAddressToStringA( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, output, &len );
- ok( ret == SOCKET_ERROR, "WSAAddressToStringA() returned %d, expected SOCKET_ERROR\n", ret );
- ok( WSAGetLastError() == WSAEFAULT, "WSAAddressToStringA() gave error %d, expected WSAEFAULT\n", WSAGetLastError() );
- ok( len == 8, "WSAAddressToStringA() gave length %d, expected 8\n", len );
-
- len = 0;
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_addr.s_addr = 0;
- sockaddr.sin_port = 0;
- WSASetLastError( 0xdeadbeef );
- ret = WSAAddressToStringW( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, NULL, &len );
- ok( ret == SOCKET_ERROR, "got %d\n", ret );
- ok( WSAGetLastError() == WSAEFAULT, "got %08x\n", WSAGetLastError() );
- ok( len == 8, "got %u\n", len );
-
- len = ARRAY_SIZE(outputW);
- memset( outputW, 0, sizeof(outputW) );
- ret = WSAAddressToStringW( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, outputW, &len );
- ok( !ret, "WSAAddressToStringW() returned %d\n", ret );
- ok( len == 8, "got %u\n", len );
- ok( !wcscmp(outputW, L"0.0.0.0"), "got %s\n", wine_dbgstr_w(outputW) );
-
- for (i = 0; i < 2; i++)
- {
- for (j = 0; j < ARRAY_SIZE(ipv4_tests); j++)
- {
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_addr.s_addr = ipv4_tests[j].address;
- sockaddr.sin_port = ipv4_tests[j].port;
-
- if (i == 0)
- {
- len = sizeof(output);
- memset(output, 0, len);
- ret = WSAAddressToStringA( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, output, &len );
- ok( !ret, "ipv4_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
- ok( lstrcmpA( output, ipv4_tests[j].output ) == 0,
- "ipv4_tests[%d]: got address %s, expected %s\n",
- j, wine_dbgstr_a(output), wine_dbgstr_a(ipv4_tests[j].output) );
- ok( len == lstrlenA(ipv4_tests[j].output) + 1,
- "ipv4_tests[%d]: got length %d, expected %d\n",
- j, len, lstrlenA(ipv4_tests[j].output) + 1 );
- }
- else
- {
- len = sizeof(outputW);
- memset(outputW, 0, len);
- ret = WSAAddressToStringW( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, outputW, &len );
- MultiByteToWideChar( CP_ACP, 0, ipv4_tests[j].output, -1,
- expected_outputW, ARRAY_SIZE(expected_outputW) );
- ok( !ret, "ipv4_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
- ok( lstrcmpW( outputW, expected_outputW ) == 0,
- "ipv4_tests[%d]: got address %s, expected %s\n",
- j, wine_dbgstr_w(outputW), wine_dbgstr_w(expected_outputW) );
- ok( len == lstrlenW(expected_outputW) + 1,
- "ipv4_tests[%d]: got length %d, expected %d\n",
- j, len, lstrlenW(expected_outputW) + 1 );
- }
- }
-
- /* check to see if IPv6 is available */
- v6 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
- if (v6 == INVALID_SOCKET) {
- skip("Could not create IPv6 socket (LastError: %d; %d expected if IPv6 not available).\n",
- WSAGetLastError(), WSAEAFNOSUPPORT);
- continue;
- }
- closesocket(v6);
-
- for (j = 0; j < ARRAY_SIZE(ipv6_tests); j++)
- {
- sockaddr6.sin6_family = AF_INET6;
- sockaddr6.sin6_scope_id = ipv6_tests[j].scope;
- sockaddr6.sin6_port = ipv6_tests[j].port;
- memcpy( sockaddr6.sin6_addr.s6_addr, ipv6_tests[j].address, sizeof(ipv6_tests[j].address) );
-
- if (i == 0)
- {
- len = sizeof(output);
- ret = WSAAddressToStringA( (SOCKADDR*)&sockaddr6, sizeof(sockaddr6), NULL, output, &len );
- ok( !ret, "ipv6_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
- ok( lstrcmpA( output, ipv6_tests[j].output ) == 0,
- "ipv6_tests[%d]: gave address %s, expected %s\n",
- j, wine_dbgstr_a(output), wine_dbgstr_a(ipv6_tests[j].output) );
- ok( len == lstrlenA(ipv6_tests[j].output) + 1,
- "ipv6_tests[%d]: got length %d, expected %d\n",
- j, len, lstrlenA(ipv6_tests[j].output) + 1 );
- }
- else
- {
- len = sizeof(outputW);
- ret = WSAAddressToStringW( (SOCKADDR*)&sockaddr6, sizeof(sockaddr6), NULL, outputW, &len );
- MultiByteToWideChar( CP_ACP, 0, ipv6_tests[j].output, -1,
- expected_outputW, ARRAY_SIZE(expected_outputW) );
- ok( !ret, "ipv6_tests[%d] failed unexpectedly: %d\n", j, WSAGetLastError() );
- ok( lstrcmpW( outputW, expected_outputW ) == 0,
- "ipv6_tests[%d]: got address %s, expected %s\n",
- j, wine_dbgstr_w(outputW), wine_dbgstr_w(expected_outputW) );
- ok( len == lstrlenW(expected_outputW) + 1,
- "ipv6_tests[%d]: got length %d, expected %d\n",
- j, len, lstrlenW(expected_outputW) + 1 );
- }
- }
- }
-}
-
-static void test_WSAStringToAddress(void)
-{
- static struct
- {
- char input[32];
- ULONG address;
- USHORT port;
- int error;
- }
- ipv4_tests[] =
- {
- { "0.0.0.0", 0 },
- { "127.127.127.127", 0x7f7f7f7f },
- { "255.255.255.255", 0xffffffff },
- { "127.127.127.127:65535", 0x7f7f7f7f, 65535 },
- { "255.255.255.255:65535", 0xffffffff, 65535 },
- { "2001::1", 0xd1070000, 0, WSAEINVAL },
- { "1.2.3.", 0, 0, WSAEINVAL },
- { "", 0, 0, WSAEINVAL },
- };
- static struct
- {
- char input[64];
- USHORT address[8];
- USHORT port;
- int error;
- }
- ipv6_tests[] =
- {
- { "::1", { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
- { "[::1]", { 0, 0, 0, 0, 0, 0, 0, 0x100 } },
- { "[::1]:65535", { 0, 0, 0, 0, 0, 0, 0, 0x100 }, 0xffff },
- { "2001::1", { 0x120, 0, 0, 0, 0, 0, 0, 0x100 } },
- { "::1]:65535", { 0, 0, 0, 0, 0, 0, 0, 0x100 }, 0, WSAEINVAL },
- { "001::1", { 0x100, 0, 0, 0, 0, 0, 0, 0x100 } },
- { "::1:2:3:4:5:6:7", { 0, 0, 0x100, 0x200, 0x300, 0x400, 0x500, 0x600 }, 0, WSAEINVAL }, /* Windows bug */
- { "1.2.3.4", { 0x201, 0x3, 0, 0, 0, 0, 0, 0 }, 0, WSAEINVAL },
- { "1:2:3:", { 0x100, 0x200, 0x300, 0, 0, 0, 0 }, 0, WSAEINVAL },
- { "", { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, WSAEINVAL },
- };
-
- WCHAR inputW[64];
- INT len, ret, expected_len, expected_ret;
- short expected_family;
- SOCKADDR_IN sockaddr;
- SOCKADDR_IN6 sockaddr6;
- int i, j;
-
- len = 0;
- WSASetLastError( 0 );
- ret = WSAStringToAddressA( ipv4_tests[0].input, AF_INET, NULL, (SOCKADDR*)&sockaddr, &len );
- ok( ret == SOCKET_ERROR, "WSAStringToAddressA() returned %d, expected SOCKET_ERROR\n", ret );
- ok( WSAGetLastError() == WSAEFAULT, "WSAStringToAddress() gave error %d, expected WSAEFAULT\n", WSAGetLastError() );
- ok( len >= sizeof(sockaddr) || broken(len == 0) /* xp */,
- "WSAStringToAddress() gave length %d, expected at least %d\n", len, sizeof(sockaddr) );
-
- for (i = 0; i < 2; i++)
- {
- for (j = 0; j < ARRAY_SIZE(ipv4_tests); j++)
- {
- len = sizeof(sockaddr) + 10;
- expected_len = ipv4_tests[j].error ? len : sizeof(sockaddr);
- memset( &sockaddr, 0xab, sizeof(sockaddr) );
-
- WSASetLastError( 0 );
- if (i == 0)
- {
- ret = WSAStringToAddressA( ipv4_tests[j].input, AF_INET, NULL, (SOCKADDR*)&sockaddr, &len );
- }
- else
- {
- MultiByteToWideChar( CP_ACP, 0, ipv4_tests[j].input, -1, inputW, ARRAY_SIZE(inputW) );
- ret = WSAStringToAddressW( inputW, AF_INET, NULL, (SOCKADDR*)&sockaddr, &len );
- }
- expected_ret = ipv4_tests[j].error ? SOCKET_ERROR : 0;
- expected_family = ipv4_tests[j].error ? 0 : AF_INET;
- ok( ret == expected_ret,
- "WSAStringToAddress(%s) returned %d, expected %d\n",
- wine_dbgstr_a( ipv4_tests[j].input ), ret, expected_ret );
- ok( WSAGetLastError() == ipv4_tests[j].error,
- "WSAStringToAddress(%s) gave error %d, expected %d\n",
- wine_dbgstr_a( ipv4_tests[j].input ), WSAGetLastError(), ipv4_tests[j].error );
- ok( sockaddr.sin_family == expected_family,
- "WSAStringToAddress(%s) gave family %d, expected %d\n",
- wine_dbgstr_a( ipv4_tests[j].input ), sockaddr.sin_family, expected_family );
- ok( sockaddr.sin_addr.s_addr == ipv4_tests[j].address,
- "WSAStringToAddress(%s) gave address %08x, expected %08x\n",
- wine_dbgstr_a( ipv4_tests[j].input ), sockaddr.sin_addr.s_addr, ipv4_tests[j].address );
- ok( sockaddr.sin_port == ipv4_tests[j].port,
- "WSAStringToAddress(%s) gave port %04x, expected %04x\n",
- wine_dbgstr_a( ipv4_tests[j].input ), sockaddr.sin_port, ipv4_tests[j].port );
- ok( len == expected_len,
- "WSAStringToAddress(%s) gave length %d, expected %d\n",
- wine_dbgstr_a( ipv4_tests[j].input ), len, expected_len );
- }
-
- for (j = 0; j < ARRAY_SIZE(ipv6_tests); j++)
- {
- len = sizeof(sockaddr6) + 10;
- expected_len = ipv6_tests[j].error ? len : sizeof(sockaddr6);
- memset( &sockaddr6, 0xab, sizeof(sockaddr6) );
-
- WSASetLastError( 0 );
- if (i == 0)
- {
- ret = WSAStringToAddressA( ipv6_tests[j].input, AF_INET6, NULL, (SOCKADDR*)&sockaddr6, &len );
- }
- else
- {
- MultiByteToWideChar( CP_ACP, 0, ipv6_tests[j].input, -1, inputW, ARRAY_SIZE(inputW) );
- ret = WSAStringToAddressW( inputW, AF_INET6, NULL, (SOCKADDR*)&sockaddr6, &len );
- }
- if (j == 0 && ret == SOCKET_ERROR)
- {
- win_skip("IPv6 not supported\n");
- break;
- }
- expected_ret = ipv6_tests[j].error ? SOCKET_ERROR : 0;
- expected_family = ipv6_tests[j].error ? 0 : AF_INET6;
- ok( ret == expected_ret,
- "WSAStringToAddress(%s) returned %d, expected %d\n",
- wine_dbgstr_a( ipv6_tests[j].input ), ret, expected_ret );
- ok( WSAGetLastError() == ipv6_tests[j].error,
- "WSAStringToAddress(%s) gave error %d, expected %d\n",
- wine_dbgstr_a( ipv6_tests[j].input ), WSAGetLastError(), ipv6_tests[j].error );
- ok( sockaddr6.sin6_family == expected_family,
- "WSAStringToAddress(%s) gave family %d, expected %d\n",
- wine_dbgstr_a( ipv4_tests[j].input ), sockaddr6.sin6_family, expected_family );
- ok( memcmp(&sockaddr6.sin6_addr, ipv6_tests[j].address, sizeof(sockaddr6.sin6_addr)) == 0,
- "WSAStringToAddress(%s) gave address %x:%x:%x:%x:%x:%x:%x:%x, expected %x:%x:%x:%x:%x:%x:%x:%x\n",
- wine_dbgstr_a( ipv6_tests[j].input ),
- sockaddr6.sin6_addr.s6_words[0], sockaddr6.sin6_addr.s6_words[1],
- sockaddr6.sin6_addr.s6_words[2], sockaddr6.sin6_addr.s6_words[3],
- sockaddr6.sin6_addr.s6_words[4], sockaddr6.sin6_addr.s6_words[5],
- sockaddr6.sin6_addr.s6_words[6], sockaddr6.sin6_addr.s6_words[7],
- ipv6_tests[j].address[0], ipv6_tests[j].address[1],
- ipv6_tests[j].address[2], ipv6_tests[j].address[3],
- ipv6_tests[j].address[4], ipv6_tests[j].address[5],
- ipv6_tests[j].address[6], ipv6_tests[j].address[7] );
- ok( sockaddr6.sin6_scope_id == 0,
- "WSAStringToAddress(%s) gave scope %d, expected 0\n",
- wine_dbgstr_a( ipv6_tests[j].input ), sockaddr6.sin6_scope_id );
- ok( sockaddr6.sin6_port == ipv6_tests[j].port,
- "WSAStringToAddress(%s) gave port %04x, expected %04x\n",
- wine_dbgstr_a( ipv6_tests[j].input ), sockaddr6.sin6_port, ipv6_tests[j].port );
- ok( sockaddr6.sin6_flowinfo == 0,
- "WSAStringToAddress(%s) gave flowinfo %d, expected 0\n",
- wine_dbgstr_a( ipv6_tests[j].input ), sockaddr6.sin6_flowinfo );
- ok( len == expected_len,
- "WSAStringToAddress(%s) gave length %d, expected %d\n",
- wine_dbgstr_a( ipv6_tests[j].input ), len, expected_len );
- }
- }
-}
-
static DWORD WINAPI SelectReadThread(void *param)
{
select_thread_params *par = param;
@@ -3925,301 +3612,6 @@ static void test_getsockname(void)
WSACleanup();
}
-static void test_inet_addr(void)
-{
- u_long addr;
-
- addr = inet_addr(NULL);
- ok(addr == INADDR_NONE, "inet_addr succeeded unexpectedly\n");
-}
-
-static void test_addr_to_print(void)
-{
- char dst[16];
- char dst6[64];
- const char * pdst;
- struct in_addr in;
- struct in6_addr in6;
-
- u_long addr0_Num = 0x00000000;
- PCSTR addr0_Str = "0.0.0.0";
- u_long addr1_Num = 0x20201015;
- PCSTR addr1_Str = "21.16.32.32";
- u_char addr2_Num[16] = {0,0,0,0,0,0,0,0,0,0,0xff,0xfe,0xcC,0x98,0xbd,0x74};
- PCSTR addr2_Str = "::fffe:cc98:bd74";
- u_char addr3_Num[16] = {0x20,0x30,0xa4,0xb1};
- PCSTR addr3_Str = "2030:a4b1::";
- u_char addr4_Num[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0xcC,0x98,0xbd,0x74};
- PCSTR addr4_Str = "::204.152.189.116";
-
- /* Test IPv4 addresses */
- in.s_addr = addr0_Num;
-
- pdst = inet_ntoa(*((struct in_addr*)&in.s_addr));
- ok(pdst != NULL, "inet_ntoa failed %s\n", dst);
- ok(!strcmp(pdst, addr0_Str),"Address %s != %s\n", pdst, addr0_Str);
-
- /* Test that inet_ntoa and inet_ntop return the same value */
- in.S_un.S_addr = addr1_Num;
- pdst = inet_ntoa(*((struct in_addr*)&in.s_addr));
- ok(pdst != NULL, "inet_ntoa failed %s\n", dst);
- ok(!strcmp(pdst, addr1_Str),"Address %s != %s\n", pdst, addr1_Str);
-
- /* InetNtop became available in Vista and Win2008 */
- if (!pInetNtop)
- {
- win_skip("InetNtop not present, not executing tests\n");
- return;
- }
-
- /* Second part of test */
- pdst = pInetNtop(AF_INET,(void*)&in.s_addr, dst, sizeof(dst));
- ok(pdst != NULL, "InetNtop failed %s\n", dst);
- ok(!strcmp(pdst, addr1_Str),"Address %s != %s\n", pdst, addr1_Str);
-
- /* Test invalid parm conditions */
- pdst = pInetNtop(1, (void*)&in.s_addr, dst, sizeof(dst));
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == WSAEAFNOSUPPORT, "Should be WSAEAFNOSUPPORT\n");
-
- /* Test Null destination */
- pdst = NULL;
- pdst = pInetNtop(AF_INET, (void*)&in.s_addr, NULL, sizeof(dst));
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
- "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
-
- /* Test zero length passed */
- WSASetLastError(0);
- pdst = NULL;
- pdst = pInetNtop(AF_INET, (void*)&in.s_addr, dst, 0);
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
- "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
-
- /* Test length one shorter than the address length */
- WSASetLastError(0);
- pdst = NULL;
- pdst = pInetNtop(AF_INET, (void*)&in.s_addr, dst, 6);
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
- "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
-
- /* Test longer length is ok */
- WSASetLastError(0);
- pdst = NULL;
- pdst = pInetNtop(AF_INET, (void*)&in.s_addr, dst, sizeof(dst)+1);
- ok(pdst != NULL, "The pointer should be returned (%p)\n", pdst);
- ok(!strcmp(pdst, addr1_Str),"Address %s != %s\n", pdst, addr1_Str);
-
- /* Test the IPv6 addresses */
-
- /* Test an zero prefixed IPV6 address */
- memcpy(in6.u.Byte, addr2_Num, sizeof(addr2_Num));
- pdst = pInetNtop(AF_INET6,(void*)&in6.s6_addr, dst6, sizeof(dst6));
- ok(pdst != NULL, "InetNtop failed %s\n", dst6);
- ok(!strcmp(pdst, addr2_Str),"Address %s != %s\n", pdst, addr2_Str);
-
- /* Test an zero suffixed IPV6 address */
- memcpy(in6.s6_addr, addr3_Num, sizeof(addr3_Num));
- pdst = pInetNtop(AF_INET6,(void*)&in6.s6_addr, dst6, sizeof(dst6));
- ok(pdst != NULL, "InetNtop failed %s\n", dst6);
- ok(!strcmp(pdst, addr3_Str),"Address %s != %s\n", pdst, addr3_Str);
-
- /* Test the IPv6 address contains the IPv4 address in IPv4 notation */
- memcpy(in6.s6_addr, addr4_Num, sizeof(addr4_Num));
- pdst = pInetNtop(AF_INET6, (void*)&in6.s6_addr, dst6, sizeof(dst6));
- ok(pdst != NULL, "InetNtop failed %s\n", dst6);
- ok(!strcmp(pdst, addr4_Str),"Address %s != %s\n", pdst, addr4_Str);
-
- /* Test invalid parm conditions */
- memcpy(in6.u.Byte, addr2_Num, sizeof(addr2_Num));
-
- /* Test Null destination */
- pdst = NULL;
- pdst = pInetNtop(AF_INET6, (void*)&in6.s6_addr, NULL, sizeof(dst6));
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
- "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
-
- /* Test zero length passed */
- WSASetLastError(0);
- pdst = NULL;
- pdst = pInetNtop(AF_INET6, (void*)&in6.s6_addr, dst6, 0);
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
- "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
-
- /* Test length one shorter than the address length */
- WSASetLastError(0);
- pdst = NULL;
- pdst = pInetNtop(AF_INET6, (void*)&in6.s6_addr, dst6, 16);
- ok(pdst == NULL, "The pointer should not be returned (%p)\n", pdst);
- ok(WSAGetLastError() == STATUS_INVALID_PARAMETER || WSAGetLastError() == WSAEINVAL /* Win7 */,
- "Should be STATUS_INVALID_PARAMETER or WSAEINVAL not 0x%x\n", WSAGetLastError());
-
- /* Test longer length is ok */
- WSASetLastError(0);
- pdst = NULL;
- pdst = pInetNtop(AF_INET6, (void*)&in6.s6_addr, dst6, 18);
- ok(pdst != NULL, "The pointer should be returned (%p)\n", pdst);
-}
-static void test_inet_pton(void)
-{
- struct TEST_DATA
- {
- int family, ret;
- DWORD err;
- const char *printable, *collapsed, *raw_data;
- } tests[] = {
- {AF_UNSPEC, -1, WSAEFAULT, /* Test 0 */
- NULL, NULL, NULL},
- {AF_INET, -1, WSAEFAULT,
- NULL, NULL, NULL},
- {AF_INET6, -1, WSAEFAULT,
- NULL, NULL, NULL},
- {AF_UNSPEC, -1, WSAEAFNOSUPPORT,
- "127.0.0.1", NULL, NULL},
- {AF_INET, 1, 0,
- "127.0.0.1", "127.0.0.1",
- "\x7f\x00\x00\x01"},
- {AF_INET6, 0, 0,
- "127.0.0.1", "127.0.0.1", NULL},
- {AF_INET, 0, 0,
- "::1/128", NULL, NULL},
- {AF_INET6, 0, 0,
- "::1/128", NULL, NULL},
- {AF_UNSPEC, -1, WSAEAFNOSUPPORT,
- "broken", NULL, NULL},
- {AF_INET, 0, 0,
- "broken", NULL, NULL},
- {AF_INET6, 0, 0, /* Test 10 */
- "broken", NULL, NULL},
- {AF_UNSPEC, -1, WSAEAFNOSUPPORT,
- "177.32.45.20", NULL, NULL},
- {AF_INET, 1, 0,
- "177.32.45.20", "177.32.45.20",
- "\xb1\x20\x2d\x14"},
- {AF_INET6, 0, 0,
- "177.32.45.20", NULL, NULL},
- {AF_INET, 0, 0,
- "2607:f0d0:1002:51::4", NULL, NULL},
- {AF_INET6, 1, 0,
- "2607:f0d0:1002:51::4", "2607:f0d0:1002:51::4",
- "\x26\x07\xf0\xd0\x10\x02\x00\x51\x00\x00\x00\x00\x00\x00\x00\x04"},
- {AF_INET, 0, 0,
- "::177.32.45.20", NULL, NULL},
- {AF_INET6, 1, 0,
- "::177.32.45.20", "::177.32.45.20",
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x20\x2d\x14"},
- {AF_INET, 0, 0,
- "fe80::0202:b3ff:fe1e:8329", NULL, NULL},
- {AF_INET6, 1, 0,
- "fe80::0202:b3ff:fe1e:8329", "fe80::202:b3ff:fe1e:8329",
- "\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x02\xb3\xff\xfe\x1e\x83\x29"},
- {AF_INET6, 1, 0, /* Test 20 */
- "fe80::202:b3ff:fe1e:8329", "fe80::202:b3ff:fe1e:8329",
- "\xfe\x80\x00\x00\x00\x00\x00\x00\x02\x02\xb3\xff\xfe\x1e\x83\x29"},
- {AF_INET, 0, 0,
- "a", NULL, NULL},
- {AF_INET, 0, 0,
- "a.b", NULL, NULL},
- {AF_INET, 0, 0,
- "a.b.c", NULL, NULL},
- {AF_INET, 0, 0,
- "a.b.c.d", NULL, NULL},
- {AF_INET6, 1, 0,
- "2001:cdba:0000:0000:0000:0000:3257:9652", "2001:cdba::3257:9652",
- "\x20\x01\xcd\xba\x00\x00\x00\x00\x00\x00\x00\x00\x32\x57\x96\x52"},
- {AF_INET6, 1, 0,
- "2001:cdba::3257:9652", "2001:cdba::3257:9652",
- "\x20\x01\xcd\xba\x00\x00\x00\x00\x00\x00\x00\x00\x32\x57\x96\x52"},
- {AF_INET6, 1, 0,
- "2001:cdba:0:0:0:0:3257:9652", "2001:cdba::3257:9652",
- "\x20\x01\xcd\xba\x00\x00\x00\x00\x00\x00\x00\x00\x32\x57\x96\x52"},
- {AF_INET, 0, 0,
- "0x12345678", NULL, NULL},
- {AF_INET6, 0, 0, /* windows bug */
- "::1:2:3:4:5:6:7", NULL, NULL},
- {AF_INET6, 1, 0, /* Test 30 */
- "::5efe:1.2.3.4", "::5efe:1.2.3.4",
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\xfe\x01\x02\x03\x04"},
- {AF_INET6, 1, 0,
- "::ffff:0:1.2.3.4", "::ffff:0:1.2.3.4",
- "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x01\x02\x03\x04"},
- };
- int i, ret;
- DWORD err;
- char buffer[64],str[64];
- WCHAR printableW[64], collapsedW[64];
- const char *ptr;
- const WCHAR *ptrW;
-
- /* InetNtop and InetPton became available in Vista and Win2008 */
- if (!pInetNtop || !pInetNtopW || !pInetPtonA || !pInetPtonW)
- {
- win_skip("InetNtop and/or InetPton not present, not executing tests\n");
- return;
- }
-
- for (i = 0; i < ARRAY_SIZE(tests); i++)
- {
- WSASetLastError(0xdeadbeef);
- ret = pInetPtonA(tests[i].family, tests[i].printable, buffer);
- ok (ret == tests[i].ret, "Test [%d]: Expected %d, got %d\n", i, tests[i].ret, ret);
- err = WSAGetLastError();
- if (tests[i].ret == -1)
- ok (tests[i].err == err, "Test [%d]: Expected 0x%x, got 0x%x\n", i, tests[i].err, err);
- else
- ok (err == 0xdeadbeef, "Test [%d]: Expected 0xdeadbeef, got 0x%x\n", i, err);
- if (tests[i].ret != 1) continue;
- ok (memcmp(buffer, tests[i].raw_data,
- tests[i].family == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)) == 0,
- "Test [%d]: Expected binary data differs\n", i);
-
- /* Test the result from Pton with Ntop */
- strcpy (str, "deadbeef");
- ptr = pInetNtop(tests[i].family, buffer, str, sizeof(str));
- ok (ptr != NULL, "Test [%d]: Failed with NULL\n", i);
- ok (ptr == str, "Test [%d]: Pointers differ (%p != %p)\n", i, ptr, str);
- if (!ptr) continue;
- ok (strcmp(ptr, tests[i].collapsed) == 0, "Test [%d]: Expected '%s', got '%s'\n",
- i, tests[i].collapsed, ptr);
- }
-
- for (i = 0; i < ARRAY_SIZE(tests); i++)
- {
- if (tests[i].printable)
- MultiByteToWideChar(CP_ACP, 0, tests[i].printable, -1, printableW, ARRAY_SIZE(printableW));
- WSASetLastError(0xdeadbeef);
- ret = pInetPtonW(tests[i].family, tests[i].printable ? printableW : NULL, buffer);
- ok(ret == tests[i].ret, "Test [%d]: Expected %d, got %d\n", i, tests[i].ret, ret);
- err = WSAGetLastError();
- if (tests[i].ret == -1)
- ok(tests[i].err == err, "Test [%d]: Expected 0x%x, got 0x%x\n", i, tests[i].err, err);
- else if (tests[i].ret == 0)
- ok(err == WSAEINVAL || broken(err == 0xdeadbeef) /* win2008 */,
- "Test [%d]: Expected WSAEINVAL, got 0x%x\n", i, err);
- else
- ok(err == 0xdeadbeef, "Test [%d]: Expected 0xdeadbeef, got 0x%x\n", i, err);
- if (tests[i].ret != 1) continue;
- ok(memcmp(buffer, tests[i].raw_data,
- tests[i].family == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)) == 0,
- "Test [%d]: Expected binary data differs\n", i);
-
- /* Test the result from Pton with Ntop */
- printableW[0] = 0xdead;
- ptrW = pInetNtopW(tests[i].family, buffer, printableW, ARRAY_SIZE(printableW));
- ok (ptrW != NULL, "Test [%d]: Failed with NULL\n", i);
- ok (ptrW == printableW, "Test [%d]: Pointers differ (%p != %p)\n", i, ptrW, printableW);
- if (!ptrW) continue;
-
- MultiByteToWideChar(CP_ACP, 0, tests[i].collapsed, -1, collapsedW, ARRAY_SIZE(collapsedW));
- ok (lstrcmpW(ptrW, collapsedW) == 0, "Test [%d]: Expected '%s', got '%s'\n",
- i, tests[i].collapsed, wine_dbgstr_w(ptrW));
- }
-}
-
static void test_ioctlsocket(void)
{
SOCKET sock, src, dst;
@@ -8297,51 +7689,6 @@ static void test_address_list_query(void)
closesocket(s);
}
-static DWORD WINAPI inet_ntoa_thread_proc(void *param)
-{
- ULONG addr;
- const char *str;
- HANDLE *event = param;
-
- addr = inet_addr("4.3.2.1");
- ok(addr == htonl(0x04030201), "expected 0x04030201, got %08x\n", addr);
- str = inet_ntoa(*(struct in_addr *)&addr);
- ok(!strcmp(str, "4.3.2.1"), "expected 4.3.2.1, got %s\n", str);
-
- SetEvent(event[0]);
- WaitForSingleObject(event[1], 3000);
-
- return 0;
-}
-
-static void test_inet_ntoa(void)
-{
- ULONG addr;
- const char *str;
- HANDLE thread, event[2];
- DWORD tid;
-
- addr = inet_addr("1.2.3.4");
- ok(addr == htonl(0x01020304), "expected 0x01020304, got %08x\n", addr);
- str = inet_ntoa(*(struct in_addr *)&addr);
- ok(!strcmp(str, "1.2.3.4"), "expected 1.2.3.4, got %s\n", str);
-
- event[0] = CreateEventW(NULL, TRUE, FALSE, NULL);
- event[1] = CreateEventW(NULL, TRUE, FALSE, NULL);
-
- thread = CreateThread(NULL, 0, inet_ntoa_thread_proc, event, 0, &tid);
- WaitForSingleObject(event[0], 3000);
-
- ok(!strcmp(str, "1.2.3.4"), "expected 1.2.3.4, got %s\n", str);
-
- SetEvent(event[1]);
- WaitForSingleObject(thread, 3000);
-
- CloseHandle(event[0]);
- CloseHandle(event[1]);
- CloseHandle(thread);
-}
-
static void test_WSAEnumNameSpaceProvidersA(void)
{
LPWSANAMESPACE_INFOA name = NULL;
@@ -9252,8 +8599,6 @@ START_TEST( sock )
Init();
- test_inet_ntoa();
- test_inet_pton();
test_set_getsockopt();
test_so_reuseaddr();
test_ip_pktinfo();
@@ -9267,8 +8612,6 @@ START_TEST( sock )
test_WSASocket();
test_WSADuplicateSocket();
test_WSAEnumNetworkEvents();
- test_WSAAddressToString();
- test_WSAStringToAddress();
test_errors();
test_listen();
@@ -9276,8 +8619,6 @@ START_TEST( sock )
test_accept();
test_getpeername();
test_getsockname();
- test_inet_addr();
- test_addr_to_print();
test_ioctlsocket();
test_WSASendMsg();
--
2.30.2
More information about the wine-devel
mailing list