1*219b2ee8SDavid du Colombier /* posix */ 2*219b2ee8SDavid du Colombier #include <sys/types.h> 3*219b2ee8SDavid du Colombier #include <unistd.h> 4*219b2ee8SDavid du Colombier #include <stdlib.h> 5*219b2ee8SDavid du Colombier #include <string.h> 6*219b2ee8SDavid du Colombier 7*219b2ee8SDavid du Colombier /* bsd extensions */ 8*219b2ee8SDavid du Colombier #include <sys/uio.h> 9*219b2ee8SDavid du Colombier #include <sys/socket.h> 10*219b2ee8SDavid du Colombier #include <netinet/in.h> 11*219b2ee8SDavid du Colombier 12*219b2ee8SDavid du Colombier #define CLASS(x) (x[0]>>6) 13*219b2ee8SDavid du Colombier 14*219b2ee8SDavid du Colombier unsigned long 15*219b2ee8SDavid du Colombier inet_addr(char *from) 16*219b2ee8SDavid du Colombier { 17*219b2ee8SDavid du Colombier int i; 18*219b2ee8SDavid du Colombier char *p; 19*219b2ee8SDavid du Colombier unsigned char to[4]; 20*219b2ee8SDavid du Colombier unsigned long x; 21*219b2ee8SDavid du Colombier 22*219b2ee8SDavid du Colombier p = from; 23*219b2ee8SDavid du Colombier memset(to, 0, 4); 24*219b2ee8SDavid du Colombier for(i = 0; i < 4 && *p; i++){ 25*219b2ee8SDavid du Colombier to[i] = strtoul(p, &p, 0); 26*219b2ee8SDavid du Colombier if(*p == '.') 27*219b2ee8SDavid du Colombier p++; 28*219b2ee8SDavid du Colombier } 29*219b2ee8SDavid du Colombier 30*219b2ee8SDavid du Colombier switch(CLASS(to)){ 31*219b2ee8SDavid du Colombier case 0: /* class A - 1 byte net */ 32*219b2ee8SDavid du Colombier case 1: 33*219b2ee8SDavid du Colombier if(i == 3){ 34*219b2ee8SDavid du Colombier to[3] = to[2]; 35*219b2ee8SDavid du Colombier to[2] = to[1]; 36*219b2ee8SDavid du Colombier to[1] = 0; 37*219b2ee8SDavid du Colombier } else if (i == 2){ 38*219b2ee8SDavid du Colombier to[3] = to[1]; 39*219b2ee8SDavid du Colombier to[1] = 0; 40*219b2ee8SDavid du Colombier } 41*219b2ee8SDavid du Colombier break; 42*219b2ee8SDavid du Colombier case 2: /* class B - 2 byte net */ 43*219b2ee8SDavid du Colombier if(i == 3){ 44*219b2ee8SDavid du Colombier to[3] = to[2]; 45*219b2ee8SDavid du Colombier to[2] = 0; 46*219b2ee8SDavid du Colombier } 47*219b2ee8SDavid du Colombier break; 48*219b2ee8SDavid du Colombier } 49*219b2ee8SDavid du Colombier x = nptohl(to); 50*219b2ee8SDavid du Colombier return x; 51*219b2ee8SDavid du Colombier } 52