|
|
1.1 root 1: static char *sccsid = "@(#)getpwent.c 4.1 10/9/80";
2:
3: #include <pwd.h>
4:
5: #define BUFSIZ 160
6:
7: static int pwf = -1;
8: static char line[BUFSIZ+1];
9: static struct passwd passwd;
10:
11: setpwent()
12: {
13: if( pwf == -1 )
14: pwf = open( "/etc/passwd", 0 );
15: else
16: lseek(pwf, 0l, 0);
17: }
18:
19: endpwent()
20: {
21: if( pwf != -1 ){
22: close( pwf );
23: pwf = -1;
24: }
25: }
26:
27: static char *
28: pwskip(p)
29: register char *p;
30: {
31: while( *p && *p != ':' )
32: ++p;
33: if( *p ) *p++ = 0;
34: return(p);
35: }
36:
37: struct passwd *
38: getpwent()
39: {
40: register char *p, *q;
41: register int i, j;
42:
43: if (pwf == -1) {
44: if( (pwf = open( "/etc/passwd", 0 )) == -1 )
45: return(0);
46: }
47: i = read(pwf, line, BUFSIZ);
48: for (j = 0; j < i; j++)
49: if (line[j] == '\n')
50: break;
51: if (j >= i)
52: return(0);
53: line[++j] = 0;
54: lseek(pwf, (long) (j - i), 1);
55: p = line;
56: passwd.pw_name = p;
57: p = pwskip(p);
58: /* passwd.pw_passwd = p; */
59: p = q = pwskip(p);
60: /* passwd.pw_uid = atoi(p); */
61: p = pwskip(p);
62: p[-1] = 0;
63: passwd.pw_uid = atou(q);
64: /* passwd.pw_gid = atoi(p); */
65: /* passwd.pw_quota = 0; */
66: /* passwd.pw_comment = ""; */
67: q = p;
68: p = pwskip(p);
69: p[-1] = 0;
70: passwd.pw_gid = atou(q);
71: /* passwd.pw_gecos = p; */
72: p = pwskip(p);
73: passwd.pw_dir = p;
74: p = pwskip(p);
75: /* passwd.pw_shell = p; */
76: /* while(*p && *p != '\n') p++; */
77: *p = '\0';
78: return(&passwd);
79: }
80:
81: atou(p)
82: register char *p;
83: {
84: register int i = 0;
85:
86: if (p != 0)
87: while (*p)
88: i = i * 10 + *p++ - '0';
89: return (i);
90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.