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

1.1       root        1: /* @(#)getpwent.c      4.1 (Berkeley) 12/21/80 */
                      2: #include <stdio.h>
                      3: #include <pwd.h>
                      4: 
                      5: static char PASSWD[]   = "/etc/passwd";
                      6: static char EMPTY[] = "";
                      7: static FILE *pwf = NULL;
                      8: static char line[BUFSIZ+1];
                      9: static struct passwd passwd;
                     10: 
                     11: setpwent()
                     12: {
                     13:        if( pwf == NULL )
                     14:                pwf = fopen( PASSWD, "r" );
                     15:        else
                     16:                rewind( pwf );
                     17: }
                     18: 
                     19: endpwent()
                     20: {
                     21:        if( pwf != NULL ){
                     22:                fclose( pwf );
                     23:                pwf = NULL;
                     24:        }
                     25: }
                     26: 
                     27: static char *
                     28: pwskip(p)
                     29: register char *p;
                     30: {
                     31:        while( *p && *p != ':' )
                     32:                ++p;
                     33:        if( *p ) *p++ = 0;
                     34:        return(p);
                     35: }
                     36: 
                     37: struct passwd *
                     38: getpwent()
                     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: }

unix.superglobalmegacorp.com

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