Annotation of 42BSD/lib/libc/gen/getgrent.c, revision 1.1.1.1

1.1       root        1: /* @(#)getgrent.c      4.3 (Berkeley) 8/18/83 */
                      2: 
                      3: #include <stdio.h>
                      4: #include <grp.h>
                      5: 
                      6: #define        MAXGRP  200
                      7: 
                      8: static char GROUP[] = "/etc/group";
                      9: static FILE *grf = NULL;
                     10: static char line[BUFSIZ+1];
                     11: static struct group group;
                     12: static char *gr_mem[MAXGRP];
                     13: 
                     14: setgrent()
                     15: {
                     16:        if( !grf )
                     17:                grf = fopen( GROUP, "r" );
                     18:        else
                     19:                rewind( grf );
                     20: }
                     21: 
                     22: endgrent()
                     23: {
                     24:        if( grf ){
                     25:                fclose( grf );
                     26:                grf = NULL;
                     27:        }
                     28: }
                     29: 
                     30: static char *
                     31: grskip(p,c)
                     32: register char *p;
                     33: register c;
                     34: {
                     35:        while( *p && *p != c ) ++p;
                     36:        if( *p ) *p++ = 0;
                     37:        return( p );
                     38: }
                     39: 
                     40: struct group *
                     41: getgrent()
                     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;
                     50:        group.gr_passwd = p = grskip(p,':');
                     51:        group.gr_gid = atoi( p = grskip(p,':') );
                     52:        group.gr_mem = gr_mem;
                     53:        p = grskip(p,':');
                     54:        grskip(p,'\n');
                     55:        q = gr_mem;
                     56:        while( *p ){
                     57:                if (q < &gr_mem[MAXGRP-1])
                     58:                        *q++ = p;
                     59:                p = grskip(p,',');
                     60:        }
                     61:        *q = NULL;
                     62:        return( &group );
                     63: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.