|
|
1.1 root 1: /* @(#)inet_network.c 4.2 10/7/82 */
2:
3: #include <sys/types.h>
4: #include <ctype.h>
5:
6: /*
7: * Internet network address interpretation routine.
8: * The library routines call this routine to interpret
9: * network numbers.
10: */
11: u_long
12: inet_network(cp)
13: register char *cp;
14: {
15: register u_long val, base, n;
16: register char c;
17: u_long parts[4], *pp = parts;
18: register int i;
19:
20: again:
21: val = 0; base = 10;
22: if (*cp == '0')
23: base = 8, cp++;
24: if (*cp == 'x' || *cp == 'X')
25: base = 16, cp++;
26: while (c = *cp) {
27: if (isdigit(c)) {
28: val = (val * base) + (c - '0');
29: cp++;
30: continue;
31: }
32: if (base == 16 && isxdigit(c)) {
33: val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
34: cp++;
35: continue;
36: }
37: break;
38: }
39: if (*cp == '.') {
40: if (pp >= parts + 4)
41: return (-1);
42: *pp++ = val, cp++;
43: goto again;
44: }
45: if (*cp && !isspace(*cp))
46: return (-1);
47: *pp++ = val;
48: n = pp - parts;
49: if (n > 4)
50: return (-1);
51: for (val = 0, i = 0; i < n; i++) {
52: val <<= 8;
53: val |= parts[i] & 0xff;
54: }
55: return (val);
56: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.