1: #include <stdio.h>
2: #include <grp.h>
3:
4: #define CL ':'
5: #define CM ','
6: #define NL '\n'
7: #define MAXGRP 100
8:
9: static char GROUP[] = "/etc/group";
10: static FILE *grf = NULL;
11: static char line[BUFSIZ+1];
12: static struct group group;
13: static char *gr_mem[MAXGRP];
14:
15: setgrent()
16: {
17: if( !grf )
18: grf = fopen( GROUP, "r" );
19: else
20: rewind( grf );
21: }
22:
23: endgrent()
24: {
25: if( grf ){
26: fclose( grf );
27: grf = NULL;
28: }
29: }
30:
31: static char *
32: grskip(p,c)
33: register char *p;
34: register c;
35: {
36: while( *p && *p != c ) ++p;
37: if( *p ) *p++ = 0;
38: return( p );
39: }
40:
41: struct group *
42: getgrent()
43: {
44: register char *p, **q;
45:
46: if( !grf && !(grf = fopen( GROUP, "r" )) )
47: return(NULL);
48: if( !(p = fgets( line, BUFSIZ, grf )) )
49: return(NULL);
50: group.gr_name = p;
51: group.gr_passwd = p = grskip(p,CL);
52: group.gr_gid = atoi( p = grskip(p,CL) );
53: group.gr_mem = gr_mem;
54: p = grskip(p,CL);
55: grskip(p,NL);
56: q = gr_mem;
57: while( *p ){
58: *q++ = p;
59: p = grskip(p,CM);
60: }
61: *q = NULL;
62: return( &group );
63: }
Defined functions
Defined variables
GROUP
defined in line
9; used 2 times
group
defined in line
12; used 5 times
line
defined in line
11; used 1 times
Defined macros
CL
defined in line
4; used 3 times
CM
defined in line
5; used 1 times
MAXGRP
defined in line
7; used 1 times
NL
defined in line
6; used 1 times