|
|
1.1 ! root 1: /* if /n/... seems to screw up, type netfsbug >xxx; mail pjw < xxx */ ! 2: #include "stdio.h" ! 3: #include "nlist.h" ! 4: #include "sys/types.h" ! 5: #include "sys/neta.h" ! 6: /* ! 7: struct nlist { ! 8: char *n_name; ! 9: unsigned char n_type; ! 10: char n_other; ! 11: short n_desc; ! 12: unsigned long n_value; ! 13: }; ! 14: */ ! 15: extern int errno; ! 16: char *cmd[] = { 0, "stat", "wrt", "read", "free", "trunc", "updat", "get", ! 17: "nami", "put", "root", "ndel", "nlink", "creat", "nomatch", "nstart", ! 18: "nioctl"}; ! 19: struct nlist nl[] = { ! 20: {"_netabuf"}, {0} ! 21: }; ! 22: struct { ! 23: char len, s, n, dummie; ! 24: int b[4000]; ! 25: } x; ! 26: struct rcva *rp; ! 27: struct senda *sp; ! 28: main() ! 29: { int fd, n, i; ! 30: nlist("/unix", nl); ! 31: if(nl[0].n_value == 0) { ! 32: fprintf(stderr, "nlist failed\n"); ! 33: exit(1); ! 34: } ! 35: fd = open("/dev/kmem", 0); ! 36: if(fd < 0) { ! 37: perror("/dev/kmem"); ! 38: exit(1); ! 39: } ! 40: lseek(fd, nl[0].n_value, 0); ! 41: if(errno) ! 42: perror("lseek"); ! 43: n = read(fd, (char *) &x, sizeof(x)); ! 44: sp = (struct senda *) x.b; ! 45: rp = (struct rcva *) (x.b + x.len * sizeof(struct senda)/sizeof(int)); ! 46: for(i = x.n - 1; i >= 0; i--) ! 47: out(i); ! 48: for(i = x.len - 1; i >= x.n; i--) ! 49: out(i); ! 50: } ! 51: ! 52: out(i) ! 53: { ! 54: printf("%d %s tran=%d uid=%d gid=%d maj=%d min=%d tag=0x%x mode=0%o\n", ! 55: sp[i].version, cmd[sp[i].cmd], sp[i].trannum, sp[i].uid, ! 56: sp[i].gid, (sp[i].dev & 0xff00) >> 8, sp[i].dev & 0xff, ! 57: sp[i].tag, sp[i].mode & 0xffff); ! 58: printf("\tnuid=%d ngid=%d flag=%d ino=%d cnt=%d offset=%d\n", ! 59: sp[i].newuid, sp[i].newgid, sp[i].flags, sp[i].ino, sp[i].count, ! 60: sp[i].offset); ! 61: printf("tran=%d err=%d flag=%d maj=%d min=%d size=%d mode=0%o\n", ! 62: rp[i].trannum, rp[i].errno, rp[i].flags, (rp[i].dev & 0xff00) >> 16, ! 63: rp[i].dev & 0xff, rp[i].size, rp[i].mode & 0xffff); ! 64: printf("\tuid=%d gid=%d tag=0x%x nlnk=%d ino=%d count=%d\n", ! 65: rp[i].uid, rp[i].gid, rp[i].tag, rp[i].nlink, rp[i].ino, ! 66: rp[i].count); ! 67: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.