+writepsdb(unixname)
+ char *unixname;
+{
+ int nllen;
+ register FILE *fp;
+
+ setuid(getuid());
+ if ((fp = fopen(psdb, "w")) == NULL) {
+ perror(psdb);
+ exit(1);
+ } else
+ fchmod(fileno(fp), 0644);
+ nllen = sizeof nl / sizeof (struct nlist);
+ fwrite((char *) &nllen, sizeof nllen, 1, fp);
+ fwrite((char *) nl, sizeof (struct nlist), nllen, fp);
+ fwrite((char *) &nttys, sizeof nttys, 1, fp);
+ fwrite((char *) allttys, sizeof (struct ttys), nttys, fp);
+ fwrite(unixname, strlen(unixname) + 1, 1, fp);
+ fclose(fp);
+}
+
+readpsdb(unixname)
+ char *unixname;
+{
+ int nllen;
+ register i;
+ register FILE *fp;
+ char unamebuf[BUFSIZ];
+ char *p = unamebuf;
+ extern int errno;
+
+ if ((fp = fopen(psdb, "r")) == NULL) {
+ if (errno == ENOENT)
+ return (0);
+ perror(psdb);
+ exit(1);
+ }
+
+ fread((char *) &nllen, sizeof nllen, 1, fp);
+ fread((char *) nl, sizeof (struct nlist), nllen, fp);
+ fread((char *) &nttys, sizeof nttys, 1, fp);
+ fread((char *) allttys, sizeof (struct ttys), nttys, fp);
+ while ((*p = getc(fp)) != '\0')
+ p++;
+ return (strcmp(unixname, unamebuf) == 0);
+}
+