1*c9945492SAndroid Build Coastguard Worker #include <ctype.h> 2*c9945492SAndroid Build Coastguard Worker #include <sys/socket.h> 3*c9945492SAndroid Build Coastguard Worker #include <netinet/in.h> 4*c9945492SAndroid Build Coastguard Worker #include <arpa/inet.h> 5*c9945492SAndroid Build Coastguard Worker #include <stdlib.h> 6*c9945492SAndroid Build Coastguard Worker __inet_aton(const char * s0,struct in_addr * dest)7*c9945492SAndroid Build Coastguard Workerint __inet_aton(const char *s0, struct in_addr *dest) 8*c9945492SAndroid Build Coastguard Worker { 9*c9945492SAndroid Build Coastguard Worker const char *s = s0; 10*c9945492SAndroid Build Coastguard Worker unsigned char *d = (void *)dest; 11*c9945492SAndroid Build Coastguard Worker unsigned long a[4] = { 0 }; 12*c9945492SAndroid Build Coastguard Worker char *z; 13*c9945492SAndroid Build Coastguard Worker int i; 14*c9945492SAndroid Build Coastguard Worker 15*c9945492SAndroid Build Coastguard Worker for (i=0; i<4; i++) { 16*c9945492SAndroid Build Coastguard Worker a[i] = strtoul(s, &z, 0); 17*c9945492SAndroid Build Coastguard Worker if (z==s || (*z && *z != '.') || !isdigit(*s)) 18*c9945492SAndroid Build Coastguard Worker return 0; 19*c9945492SAndroid Build Coastguard Worker if (!*z) break; 20*c9945492SAndroid Build Coastguard Worker s=z+1; 21*c9945492SAndroid Build Coastguard Worker } 22*c9945492SAndroid Build Coastguard Worker if (i==4) return 0; 23*c9945492SAndroid Build Coastguard Worker switch (i) { 24*c9945492SAndroid Build Coastguard Worker case 0: 25*c9945492SAndroid Build Coastguard Worker a[1] = a[0] & 0xffffff; 26*c9945492SAndroid Build Coastguard Worker a[0] >>= 24; 27*c9945492SAndroid Build Coastguard Worker case 1: 28*c9945492SAndroid Build Coastguard Worker a[2] = a[1] & 0xffff; 29*c9945492SAndroid Build Coastguard Worker a[1] >>= 16; 30*c9945492SAndroid Build Coastguard Worker case 2: 31*c9945492SAndroid Build Coastguard Worker a[3] = a[2] & 0xff; 32*c9945492SAndroid Build Coastguard Worker a[2] >>= 8; 33*c9945492SAndroid Build Coastguard Worker } 34*c9945492SAndroid Build Coastguard Worker for (i=0; i<4; i++) { 35*c9945492SAndroid Build Coastguard Worker if (a[i] > 255) return 0; 36*c9945492SAndroid Build Coastguard Worker d[i] = a[i]; 37*c9945492SAndroid Build Coastguard Worker } 38*c9945492SAndroid Build Coastguard Worker return 1; 39*c9945492SAndroid Build Coastguard Worker } 40*c9945492SAndroid Build Coastguard Worker 41*c9945492SAndroid Build Coastguard Worker weak_alias(__inet_aton, inet_aton); 42