|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1382 (0x566) Types: TextFile Notes: UNIX file Names: »getpwent.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦f4b8d8c84⟧ UNIX Filesystem └─⟦this⟧ »libc/gen/getpwent.c«
/* * Coherent I/O Library. * Routines to get the password file entry. * (searches by next entry, name or numerical id). */ #include <stdio.h> #include <pwd.h> #define field(x) { x=cp; while (*cp++); } #define NPWLINE 120 #define PWFILE "/etc/passwd" static char pwline[NPWLINE]; static struct passwd pw; static FILE *pwfile = { NULL }; struct passwd * getpwnam(name) char *name; { register struct passwd *pwp; setpwent(); while ((pwp = getpwent()) != NULL) if (streq(name, pwp->pw_name)) return (pwp); return (NULL); } struct passwd * getpwuid(uid) { register struct passwd *pwp; setpwent(); while ((pwp = getpwent()) != NULL) if (uid == pwp->pw_uid) return (pwp); return (NULL); } struct passwd * getpwent() { register char *cp, *xp; register c; if (pwfile == NULL) if ((pwfile = fopen(PWFILE, "r")) == NULL) return (NULL); cp = pwline; while ((c = getc(pwfile))!=EOF && c!='\n') { if (c == ':') c = '\0'; if (cp < &pwline[NPWLINE-1]) *cp++ = c; } if (c == EOF) return (NULL); *cp = '\0'; cp = pwline; field(pw.pw_name); field(pw.pw_passwd); field(xp); pw.pw_uid = atoi(xp); field(xp); pw.pw_gid = atoi(xp); field(pw.pw_gecos); field(pw.pw_dir); field(pw.pw_shell); return (&pw); } setpwent() { if (pwfile != NULL) rewind(pwfile); } endpwent() { if (pwfile != NULL) { fclose(pwfile); pwfile = NULL; } }