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