|
|
1.1 root 1: /* getprotoent.c 4.6 83/05/23 */
2:
3: #include <stdio.h>
4: #include <sys/types.h>
5: #include <sys/socket.h>
6: #include <netdb.h>
7: #include <ctype.h>
8:
9: #define MAXALIASES 35
10:
11: static char PROTODB[] = "/etc/protocols";
12: static FILE *protof = NULL;
13: static char line[BUFSIZ+1];
14: static struct protoent proto;
15: static char *proto_aliases[MAXALIASES];
16: static int stayopen = 0;
17: static char *any();
18:
19: setprotoent(f)
20: int f;
21: {
22: if (protof == NULL)
23: protof = fopen(PROTODB, "r" );
24: else
25: rewind(protof);
26: stayopen |= f;
27: }
28:
29: endprotoent()
30: {
31: if (protof && !stayopen) {
32: fclose(protof);
33: protof = NULL;
34: }
35: }
36:
37: struct protoent *
38: getprotoent()
39: {
40: char *p;
41: register char *cp, **q;
42:
43: if (protof == NULL && (protof = fopen(PROTODB, "r" )) == NULL)
44: return (NULL);
45: again:
46: if ((p = fgets(line, BUFSIZ, protof)) == NULL)
47: return (NULL);
48: if (*p == '#')
49: goto again;
50: cp = any(p, "#\n");
51: if (cp == NULL)
52: goto again;
53: *cp = '\0';
54: proto.p_name = p;
55: cp = any(p, " \t");
56: if (cp == NULL)
57: goto again;
58: *cp++ = '\0';
59: while (*cp == ' ' || *cp == '\t')
60: cp++;
61: p = any(cp, " \t");
62: if (p != NULL)
63: *p++ = '\0';
64: proto.p_proto = atoi(cp);
65: q = proto.p_aliases = proto_aliases;
66: if (p != NULL) {
67: cp = p;
68: while (cp && *cp) {
69: if (*cp == ' ' || *cp == '\t') {
70: cp++;
71: continue;
72: }
73: if (q < &proto_aliases[MAXALIASES - 1])
74: *q++ = cp;
75: cp = any(cp, " \t");
76: if (cp != NULL)
77: *cp++ = '\0';
78: }
79: }
80: *q = NULL;
81: return (&proto);
82: }
83:
84: static char *
85: any(cp, match)
86: register char *cp;
87: char *match;
88: {
89: register char *mp, c;
90:
91: while (c = *cp) {
92: for (mp = match; *mp; mp++)
93: if (*mp == c)
94: return (cp);
95: cp++;
96: }
97: return ((char *)0);
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.