|
|
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(dev, node) ! 19: { ! 20: register char *nm; ! 21: if (dev == 0xffff) { ! 22: static char buf[8]; ! 23: sprintf(buf, "p%4.4x", node&0xffff); ! 24: return buf; ! 25: } ! 26: nm = lookdir(node); ! 27: if (nm == 0) ! 28: return "?"; ! 29: if (nm[0] == 't' && nm[1] == 't' && nm[2] == 'y') ! 30: nm += 3; ! 31: return nm; ! 32: } ! 33: ! 34: Dirnode * ! 35: getdir(dirname, list) ! 36: char *dirname; Dirnode *list; ! 37: { ! 38: struct stat sbuf; ! 39: register fd, n; ! 40: register Dirnode *np; register struct direct *dp; ! 41: ! 42: if ((fd = open(dirname, 0)) < 0) ! 43: return 0; ! 44: if (fstat(fd, &sbuf) < 0 || (np = Malloc(Dirnode, 1)) == 0) { ! 45: close(fd); return 0; ! 46: } ! 47: n = sbuf.st_size/sizeof(struct direct); ! 48: if ((dp = Malloc(struct direct, n)) == 0) { ! 49: free(np); close(fd); return 0; ! 50: } ! 51: if (!Read(fd, dp, sbuf.st_size)) { ! 52: free(np); free(dp); close(fd); return 0; ! 53: } ! 54: np->next = list; ! 55: np->begin = dp; ! 56: np->end = dp + n; ! 57: close(fd); ! 58: return np; ! 59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.