
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: }