Annotation of researchv10no/cmd/ps/gettty.c, revision 1.1.1.1

1.1       root        1: #include "ps.h"
                      2: #include <stdio.h>
                      3: #include <ndir.h>
                      4: 
                      5: char *
                      6: gettty(dev, node)
                      7: {
                      8:        register char *nm;
                      9:        if (dev == NODEV) {     /* cheap hack: assume it's a pipe */
                     10:                static char buf[8];
                     11:                sprintf(buf, "p%4.4x", node&0xffff);
                     12:                return buf;
                     13:        }
                     14:        nm = lookdir(node);
                     15:        if (nm == 0)
                     16:                return "?";
                     17:        if (nm[0] == 't' && nm[1] == 't' && nm[2] == 'y')
                     18:                nm += 3;
                     19:        return nm;
                     20: }
                     21: 
                     22: initttys()
                     23: {
                     24:        char dirname[100];      /* arbitrary size */
                     25:        List *lp;
                     26:        FILE *fp;
                     27: 
                     28:        if ((fp = fopen("/lib/ttydevs", "r")) == NULL) {
                     29:                devlist = getdir("/dev", devlist);
                     30:                return;
                     31:        }
                     32:        while (fgets(dirname, sizeof(dirname), fp)) {
                     33:                dirname[strlen(dirname)-1] = 0;
                     34:                if ((lp = getdir(dirname, devlist)) != NULL)
                     35:                        devlist = lp;
                     36:        }
                     37:        fclose(fp);
                     38: }
                     39: 
                     40: char *
                     41: lookdir(node)
                     42: register node;
                     43: {
                     44:        register List *lp;
                     45:        register Entry *ep;
                     46:        if (node)
                     47:                for (lp = devlist; lp; lp = lp->next)
                     48:                        for (ep = lp->begin; ep; ep = ep->next)
                     49:                                if (ep->e_val == node)
                     50:                                        return ep->e_name;
                     51:        return 0;
                     52: }
                     53: 
                     54: List *
                     55: getdir(dirname, list)
                     56: char *dirname;
                     57: List *list;
                     58: {
                     59:        register List *lp;
                     60:        register Entry *ep;
                     61:        register DIR *dirp;
                     62:        register struct direct *dp;
                     63: 
                     64:        if((dirp = opendir(dirname)) == 0)
                     65:                return 0;
                     66:        if((lp = Malloc(List, 1)) == 0) {
                     67:                closedir(dirp);
                     68:                return 0;
                     69:        }
                     70:        lp->next = list;
                     71:        lp->begin = 0;
                     72:        lp->nentry = 0;
                     73:        for(dp = readdir(dirp); dp; dp = readdir(dirp)) {
                     74:                if(dp->d_name[0] == '.') {
                     75:                        if(dp->d_name[1] == '\0')
                     76:                                continue;
                     77:                        if(dp->d_name[1] == '.' && dp->d_name[2] == '\0')
                     78:                                continue;
                     79:                }
                     80:                if((ep = Malloc(Entry, 1)) == 0)
                     81:                        break;
                     82:                ep->next = lp->begin;
                     83:                lp->begin = ep;
                     84:                lp->nentry++;
                     85:                ep->e_val = dp->d_ino;
                     86:                strncpy(ep->e_name, dp->d_name, sizeof(ep->e_name));
                     87:        }
                     88:        closedir(dirp);
                     89:        return lp;
                     90: }

unix.superglobalmegacorp.com

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