BSD 3 development
[unix-history] / .ref-BSD-2 / upgrade / libretro / getpwent.c.16u
CommitLineData
b1f4c7a9
BJ
1#include <pwd.h>
2
3#define BUFSIZ 160
4
5static int pwf = -1;
6static char line[BUFSIZ+1];
7static struct passwd passwd;
8
9setpwent()
10{
11 if( pwf == -1 )
12 pwf = open( "/etc/passwd", 0 );
13 else
14 lseek(pwf, 0l, 0);
15}
16
17endpwent()
18{
19 if( pwf != -1 ){
20 close( pwf );
21 pwf = -1;
22 }
23}
24
25static char *
26pwskip(p)
27register char *p;
28{
29 while( *p && *p != ':' )
30 ++p;
31 if( *p ) *p++ = 0;
32 return(p);
33}
34
35struct passwd *
36getpwent()
37{
38 register char *p;
39 register int i, j;
40
41 if (pwf == -1) {
42 if( (pwf = open( "/etc/passwd", 0 )) == -1 )
43 return(0);
44 }
45 i = read(pwf, line, BUFSIZ);
46 for (j = 0; j < i; j++)
47 if (line[j] == '\n')
48 break;
49 if (j >= i)
50 return(0);
51 line[++j] = 0;
52 lseek(pwf, (long) (j - i), 1);
53 p = line;
54 passwd.pw_name = p;
55 p = pwskip(p);
56 passwd.pw_passwd = p;
57 p = pwskip(p);
58 passwd.pw_uid = atoi(p);
59 p = pwskip(p);
60 passwd.pw_uid =+ atoi(p) << 8;
61 passwd.pw_quota = 0;
62 passwd.pw_comment = "";
63 p = pwskip(p);
64 passwd.pw_gecos = p;
65 p = pwskip(p);
66 passwd.pw_dir = p;
67 p = pwskip(p);
68 passwd.pw_shell = p;
69 while(*p && *p != '\n') p++;
70 *p = '\0';
71 return(&passwd);
72}