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