convert to DEV_BSIZE size directory blocks
[unix-history] / usr / src / lib / libc / gen / getpwent.c
CommitLineData
a4b07b23
BJ
1/* @(#)getpwent.c 4.1 (Berkeley) %G% */
2#include <stdio.h>
3#include <pwd.h>
4
5static char PASSWD[] = "/etc/passwd";
6static char EMPTY[] = "";
7static FILE *pwf = NULL;
8static char line[BUFSIZ+1];
9static struct passwd passwd;
10
11setpwent()
12{
13 if( pwf == NULL )
14 pwf = fopen( PASSWD, "r" );
15 else
16 rewind( pwf );
17}
18
19endpwent()
20{
21 if( pwf != NULL ){
22 fclose( pwf );
23 pwf = NULL;
24 }
25}
26
27static char *
28pwskip(p)
29register char *p;
30{
31 while( *p && *p != ':' )
32 ++p;
33 if( *p ) *p++ = 0;
34 return(p);
35}
36
37struct passwd *
38getpwent()
39{
40 register char *p;
41
42 if (pwf == NULL) {
43 if( (pwf = fopen( PASSWD, "r" )) == NULL )
44 return(0);
45 }
46 p = fgets(line, BUFSIZ, pwf);
47 if (p==NULL)
48 return(0);
49 passwd.pw_name = p;
50 p = pwskip(p);
51 passwd.pw_passwd = p;
52 p = pwskip(p);
53 passwd.pw_uid = atoi(p);
54 p = pwskip(p);
55 passwd.pw_gid = atoi(p);
56 passwd.pw_quota = 0;
57 passwd.pw_comment = EMPTY;
58 p = pwskip(p);
59 passwd.pw_gecos = p;
60 p = pwskip(p);
61 passwd.pw_dir = p;
62 p = pwskip(p);
63 passwd.pw_shell = p;
64 while(*p && *p != '\n') p++;
65 *p = '\0';
66 return(&passwd);
67}