I have been writing some tests for InetNtop/inet_ntop and placed them in
dlls/ws2_32/tests/sock.c (snip of the code is below) but when I cross
compile I get:
make crosstest
i386-mingw32-gcc -c -I. -I. -I../../../include -I../../../include-g
-O2 -o sock.cross.o sock.c
i386-mingw32-gcc protocol.cross.o sock.cross.o testlist.cross.o -o
ws2_32_crosstest.exe -L../../../dlls ../../../libs/port/libwine_port.a
-L../../../dlls/ws2_32 -L../../../dlls/kernel32 -lws2_32 -lkernel32
sock.cross.o: In function `test_inet_addr':
/wing/dlls/ws2_32/tests/sock.c:2013: undefined reference to `_inet_n...@16'
/wing/dlls/ws2_32/tests/sock.c:2025: undefined reference to `_inet_n...@16'
/wing/dlls/ws2_32/tests/sock.c:2029: undefined reference to `_inet_n...@16'
/wing/dlls/ws2_32/tests/sock.c:2032: undefined reference to `_inet_n...@16'
collect2: ld returned 1 exit status
make: *** [ws2_32_crosstest.exe] Error 1
I am using unmodified winsock.spec and ws2_32.spec files. It does not
look like inet_ntop has been used in tests previously. Any ideas on
what I need to do to get crosstest to work?
dlls/ws2_32/tests/sock.c
static void test_inet_addr(void)
{
u_long addr;
char dst[16];
char dst6[64];
u_char ip6_addr[16] = {0x20,0x30,0xa4,0xb1};
const char * pdst;
struct in_addr in;
struct in6_addr in6;
u_long addr0_Num = 0x;
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;
addr = inet_addr(NULL);
in.S_un.S_addr = addr;
trace(addr=%ld\n,addr);
ok(addr == INADDR_NONE, inet_addr succeeded unexpectedly\n);
in.S_un.S_addr = addr0_Num;
pdst = InetNtop(AF_INET,(void*)in.S_un.S_addr,dst,sizeof(dst));
ok(strcmp(pdst, addr1_Str),Address %s != %s\n, pdst, addr0_Str);
ok(pdst != NULL, InetNtop failed %s\n, dst);
pdst = inet_ntoa(*((struct in_addr*)in.s_addr));
ok(pdst != NULL, InetNtop succeeded unexpectedly %s\n, dst);
ok(!strcmp(pdst, addr1_Str),Address %s != %s\n, pdst, addr0_Str);
trace (addr=%s\n,pdst);
in.S_un.S_addr = addr1_Num;
pdst = inet_ntoa(*((struct in_addr*)in.s_addr));
ok(pdst != NULL, inet_ntoa succeeded unexpectedly %s\n, dst);
ok(!strcmp(pdst, addr1_Str),Address %s != %s\n, pdst, addr1_Str);
trace (addr=%s\n,pdst);
pdst = InetNtop(AF_INET6,(void*)in.S_un.S_addr,dst,sizeof(dst));
trace (addr=%s\n,pdst);
ok(pdst != NULL, InetNtop failed %s\n, dst);
memcpy(in6.s6_addr,ip6_addr,sizeof(ip6_addr));
pdst = InetNtop(AF_INET6,(void*)in6.s6_addr,dst6,sizeof(dst6));
ok(pdst != NULL, InetNtop failed %s\n, dst6);
memcpy(in6.u.Byte,addr2_Num,sizeof(addr2_Num));
pdst = InetNtop(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);
}