cure cancer
[unix-history] / usr / src / lib / libc / gen / getgrent.c
CommitLineData
1662dc67 1/* @(#)getgrent.c 4.3 (Berkeley) %G% */
bb22887e 2
41746c4f
BJ
3#include <stdio.h>
4#include <grp.h>
5
1662dc67 6#define MAXGRP 200
41746c4f
BJ
7
8static char GROUP[] = "/etc/group";
9static FILE *grf = NULL;
10static char line[BUFSIZ+1];
11static struct group group;
12static char *gr_mem[MAXGRP];
13
14setgrent()
15{
16 if( !grf )
17 grf = fopen( GROUP, "r" );
18 else
19 rewind( grf );
20}
21
22endgrent()
23{
24 if( grf ){
25 fclose( grf );
26 grf = NULL;
27 }
28}
29
30static char *
31grskip(p,c)
32register char *p;
33register c;
34{
35 while( *p && *p != c ) ++p;
36 if( *p ) *p++ = 0;
37 return( p );
38}
39
40struct group *
41getgrent()
42{
43 register char *p, **q;
44
45 if( !grf && !(grf = fopen( GROUP, "r" )) )
46 return(NULL);
47 if( !(p = fgets( line, BUFSIZ, grf )) )
48 return(NULL);
49 group.gr_name = p;
bb22887e
BJ
50 group.gr_passwd = p = grskip(p,':');
51 group.gr_gid = atoi( p = grskip(p,':') );
41746c4f 52 group.gr_mem = gr_mem;
bb22887e
BJ
53 p = grskip(p,':');
54 grskip(p,'\n');
41746c4f
BJ
55 q = gr_mem;
56 while( *p ){
bb22887e
BJ
57 if (q < &gr_mem[MAXGRP-1])
58 *q++ = p;
59 p = grskip(p,',');
41746c4f
BJ
60 }
61 *q = NULL;
62 return( &group );
63}