|
|
1.1 ! root 1: #include "ps.h" ! 2: ! 3: char * ! 4: lookdir(node) ! 5: register node; ! 6: { ! 7: register Dirnode *np; ! 8: register struct direct *dp; ! 9: if (node) ! 10: for (np = devlist; np; np = np->next) ! 11: for (dp = np->begin; dp < np->end; dp++) ! 12: if (dp->d_ino == node) ! 13: return dp->d_name; ! 14: return 0; ! 15: } ! 16: ! 17: char * ! 18: gettty(node) ! 19: { ! 20: register char *nm = lookdir(node); ! 21: if (nm == 0) ! 22: return "?"; ! 23: if (nm[0] == 't' && nm[1] == 't' && nm[2] == 'y') ! 24: nm += 3; ! 25: return nm; ! 26: } ! 27: ! 28: Dirnode * ! 29: getdir(dirname, list) ! 30: char *dirname; Dirnode *list; ! 31: { ! 32: struct stat sbuf; ! 33: register fd, n; ! 34: register Dirnode *np; register struct direct *dp; ! 35: ! 36: if ((fd = open(dirname, 0)) < 0) ! 37: return 0; ! 38: if (fstat(fd, &sbuf) < 0 || (np = Malloc(Dirnode, 1)) == 0) { ! 39: close(fd); return 0; ! 40: } ! 41: n = sbuf.st_size/sizeof(struct direct); ! 42: if ((dp = Malloc(struct direct, n)) == 0) { ! 43: free(np); close(fd); return 0; ! 44: } ! 45: if (!Read(fd, dp, sbuf.st_size)) { ! 46: free(np); free(dp); close(fd); return 0; ! 47: } ! 48: np->next = list; ! 49: np->begin = dp; ! 50: np->end = dp + n; ! 51: close(fd); ! 52: return np; ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.