|
|
1.1 ! root 1: #include "ps.h" ! 2: ! 3: #define NNAMES 16 ! 4: ! 5: char *fspts[3]; ! 6: ! 7: struct direct *fsbeg, *fsend, *fsprev; ! 8: ! 9: #ifdef TEST ! 10: main(argc, argv) ! 11: char **argv; ! 12: { ! 13: register struct direct *fs; int dev; char *getfs(); ! 14: getfstab(); ! 15: if (argc <= 1) ! 16: for (fs=fsbeg; fs < fsend; fs++) ! 17: printf("%3d,%3d %.14s\n", ! 18: major(fs->d_ino), minor(fs->d_ino), fs->d_name); ! 19: else while ((argc -= 2) > 0) { ! 20: dev = atoi(*++argv); ! 21: dev = makedev(dev, atoi(*++argv)); ! 22: printf("%3d,%3d %.14s\n", major(dev), minor(dev), getfs(dev)); ! 23: } ! 24: exit(0); ! 25: } ! 26: #endif ! 27: ! 28: char * ! 29: getfs(dev) ! 30: register dev; ! 31: { ! 32: register struct direct *fs; ! 33: ! 34: if ((fs = fsprev) && fs->d_ino == dev) ! 35: return fs->d_name; ! 36: for (fs=fsbeg; fs < fsend; fs++) ! 37: if (fs->d_ino == dev || ! 38: (major(fs->d_ino) == major(dev) && minor(fs->d_ino) == 255)) { ! 39: fsprev = fs; ! 40: return fs->d_name; ! 41: } ! 42: return 0; ! 43: } ! 44: ! 45: getfstab() ! 46: { ! 47: char *buffer, *bufpt, *nlpt, *strchr(), *strrchr(), *sindex(); ! 48: struct stat fd_st; ! 49: register struct direct *fs = 0; ! 50: register char *p; int fd; ! 51: ! 52: if (fsbeg) ! 53: return 0; ! 54: ! 55: if ((fd = open("/etc/fstab", 0)) < 0) ! 56: return 1; ! 57: ! 58: if (fstat(fd, &fd_st) || (buffer = malloc((int)fd_st.st_size+1)) == 0) ! 59: return close(fd), 1; ! 60: ! 61: if (!Read(fd, buffer, (int)fd_st.st_size)) ! 62: return free(buffer), close(fd), 1; ! 63: buffer[fd_st.st_size] = 0; ! 64: ! 65: for (bufpt=buffer; nlpt=strchr(bufpt, '\n'); bufpt=nlpt) { ! 66: *nlpt++ = 0; ! 67: if ((p = strchr(bufpt, ':')) == 0) ! 68: continue; ! 69: *p = 0; ! 70: if (stat(bufpt, &fd_st)) ! 71: continue; ! 72: if ((fs = Nalloc(struct direct, fspts, NNAMES)) == 0) ! 73: break; ! 74: if (p = strrchr(bufpt, '/')) ! 75: ++p; ! 76: else ! 77: p = bufpt; ! 78: strncpy(fs->d_name, p, DIRSIZ); ! 79: fs->d_ino = fd_st.st_rdev; ! 80: } ! 81: free(buffer), close(fd); ! 82: ! 83: if ((fd = open("/usr/net/friends", 0)) < 0) ! 84: return 1; ! 85: ! 86: if (fstat(fd, &fd_st) || (buffer = malloc((int)fd_st.st_size+1)) == 0) ! 87: return close(fd), 1; ! 88: ! 89: if (!Read(fd, buffer, (int)fd_st.st_size)) ! 90: return free(buffer), close(fd), 1; ! 91: buffer[fd_st.st_size] = 0; ! 92: ! 93: for (bufpt=buffer; nlpt=strchr(bufpt, '\n'); bufpt=nlpt) { ! 94: *nlpt++ = 0; ! 95: if ((bufpt = sindex(bufpt, " \t")) == 0) ! 96: continue; ! 97: if ((bufpt = strrchr(bufpt, '/')) == 0) ! 98: continue; ! 99: if ((p = sindex(++bufpt, " \t")) == 0) ! 100: continue; ! 101: *p = 0; ! 102: if ((fs = Nalloc(struct direct, fspts, NNAMES)) == 0) ! 103: break; ! 104: strncpy(fs->d_name, bufpt, DIRSIZ); ! 105: fs->d_ino = makedev(atoi(++p), 255); ! 106: } ! 107: free(buffer), close(fd); ! 108: ! 109: if (stat(bufpt = "/proc", &fd_st) == 0 && ! 110: (fs = Nalloc(struct direct, fspts, NNAMES))) { ! 111: strncpy(fs->d_name, bufpt+1, DIRSIZ); ! 112: fs->d_ino = fd_st.st_dev; ! 113: } ! 114: if (fs) { ! 115: fsbeg = (struct direct *)fspts[0]; ! 116: fsend = (struct direct *)fspts[1]; ! 117: } ! 118: return 0; ! 119: } ! 120: ! 121: char * ! 122: sindex(s, c) ! 123: register char *s, *c; ! 124: { ! 125: register char *p = 0, *q; ! 126: while (*c) { ! 127: if ((q = strchr(s, *c++)) == 0) ! 128: continue; ! 129: if (p == 0 || q < p) ! 130: p = q; ! 131: } ! 132: return p; ! 133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.