xref: /plan9/sys/src/ape/lib/bsd/inet_addr.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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