Annotation of coherent/d/lib/libc/gen/getpwent.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Coherent I/O Library.
                      3:  * Routines to get the password file entry.
                      4:  * (searches by next entry, name or numerical id).
                      5:  */
                      6: 
                      7: #include <stdio.h>
                      8: #include <pwd.h>
                      9: 
                     10: #define field(x)       { x=cp; while (*cp++); }
                     11: #define        NPWLINE 120
                     12: #define        PWFILE  "/etc/passwd"
                     13: 
                     14: static char    pwline[NPWLINE];
                     15: static struct  passwd pw;
                     16: static FILE    *pwfile = { NULL };
                     17: 
                     18: struct passwd *
                     19: getpwnam(name)
                     20: char *name;
                     21: {
                     22:        register struct passwd *pwp;
                     23: 
                     24:        setpwent();
                     25:        while ((pwp = getpwent()) != NULL)
                     26:                if (streq(name, pwp->pw_name))
                     27:                        return (pwp);
                     28:        return (NULL);
                     29: }
                     30: 
                     31: struct passwd *
                     32: getpwuid(uid)
                     33: {
                     34:        register struct passwd *pwp;
                     35: 
                     36:        setpwent();
                     37:        while ((pwp = getpwent()) != NULL)
                     38:                if (uid == pwp->pw_uid)
                     39:                        return (pwp);
                     40:        return (NULL);
                     41: }
                     42: 
                     43: struct passwd *
                     44: getpwent()
                     45: {
                     46:        register char *cp, *xp;
                     47:        register c;
                     48: 
                     49:        if (pwfile == NULL)
                     50:                if ((pwfile = fopen(PWFILE, "r")) == NULL)
                     51:                        return (NULL);
                     52:        cp = pwline;
                     53:        while ((c = getc(pwfile))!=EOF && c!='\n') {
                     54:                if (c == ':')
                     55:                        c = '\0';
                     56:                if (cp < &pwline[NPWLINE-1])
                     57:                        *cp++ = c;
                     58:        }
                     59:        if (c == EOF)
                     60:                return (NULL);
                     61:        *cp = '\0';
                     62:        cp = pwline;
                     63:        field(pw.pw_name);
                     64:        field(pw.pw_passwd);
                     65:        field(xp);
                     66:        pw.pw_uid = atoi(xp);
                     67:        field(xp);
                     68:        pw.pw_gid = atoi(xp);
                     69:        field(pw.pw_gecos);
                     70:        field(pw.pw_dir);
                     71:        field(pw.pw_shell);
                     72:        return (&pw);
                     73: }
                     74: 
                     75: setpwent()
                     76: {
                     77:        if (pwfile != NULL)
                     78:                rewind(pwfile);
                     79: }
                     80: 
                     81: endpwent()
                     82: {
                     83:        if (pwfile != NULL) {
                     84:                fclose(pwfile);
                     85:                pwfile = NULL;
                     86:        }
                     87: }

unix.superglobalmegacorp.com

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