1 | #include <stdio.h>
|
---|
2 | #include <sys/socket.h>
|
---|
3 | #include <netinet/in.h>
|
---|
4 | #include <arpa/inet.h>
|
---|
5 |
|
---|
6 |
|
---|
7 | static struct tests
|
---|
8 | {
|
---|
9 | const char *input;
|
---|
10 | int valid;
|
---|
11 | uint32_t result;
|
---|
12 | } tests[] =
|
---|
13 | {
|
---|
14 | { "", 0, 0 },
|
---|
15 | { "-1", 0, 0 },
|
---|
16 | { "256", 1, 0x00000100 },
|
---|
17 | { "256.", 0, 0 },
|
---|
18 | { "256a", 0, 0 },
|
---|
19 | { "0x100", 1, 0x00000100 },
|
---|
20 | { "0200.0x123456", 1, 0x80123456 },
|
---|
21 | { "0300.0x89123456.", 0 ,0 },
|
---|
22 | { "0100.-0xffff0000", 0, 0 },
|
---|
23 | { "0.0xffffff", 1, 0x00ffffff },
|
---|
24 | { "0.0x1000000", 0, 0 },
|
---|
25 | { "0377.16777215", 1, 0xffffffff },
|
---|
26 | { "0377.16777216", 0, 0 },
|
---|
27 | { "0x87.077777777", 1, 0x87ffffff },
|
---|
28 | { "0x87.0100000000", 0, 0 },
|
---|
29 | { "0.1.3", 1, 0x00010003 },
|
---|
30 | { "0.256.3", 0, 0 },
|
---|
31 | { "256.1.3", 0, 0 },
|
---|
32 | { "0.1.0x10000", 0, 0 },
|
---|
33 | { "0.1.0xffff", 1, 0x0001ffff },
|
---|
34 | { "0.1a.3", 0, 0 },
|
---|
35 | { "0.1.a3", 0, 0 },
|
---|
36 | { "1.2.3.4", 1, 0x01020304 },
|
---|
37 | { "0400.2.3.4", 0, 0 },
|
---|
38 | { "1.0x100.3.4", 0, 0 },
|
---|
39 | { "1.2.256.4", 0, 0 },
|
---|
40 | { "1.2.3.0x100", 0, 0 },
|
---|
41 | { "323543357756889", 0, 0 },
|
---|
42 | { "10.1.2.3.4", 0, 0},
|
---|
43 | };
|
---|
44 |
|
---|
45 |
|
---|
46 | int
|
---|
47 | main (int argc, char *argv[])
|
---|
48 | {
|
---|
49 | int result = 0;
|
---|
50 | size_t cnt;
|
---|
51 |
|
---|
52 | for (cnt = 0; cnt < sizeof (tests) / sizeof (tests[0]); ++cnt)
|
---|
53 | {
|
---|
54 | struct in_addr addr;
|
---|
55 |
|
---|
56 | if ((int) inet_aton (tests[cnt].input, &addr) != tests[cnt].valid)
|
---|
57 | {
|
---|
58 | if (tests[cnt].valid)
|
---|
59 | printf ("\"%s\" not seen as valid IP address\n", tests[cnt].input);
|
---|
60 | else
|
---|
61 | printf ("\"%s\" seen as valid IP address\n", tests[cnt].input);
|
---|
62 | result = 1;
|
---|
63 | }
|
---|
64 | else if (tests[cnt].valid && addr.s_addr != ntohl (tests[cnt].result))
|
---|
65 | {
|
---|
66 | printf ("\"%s\" not converted correctly: is %08x, should be %08x\n",
|
---|
67 | tests[cnt].input, addr.s_addr, tests[cnt].result);
|
---|
68 | result = 1;
|
---|
69 | }
|
---|
70 | }
|
---|
71 |
|
---|
72 | return result;
|
---|
73 | }
|
---|