iostats: respect path, add fmts, more worker threads [rsc] --rw-rw-r-- M 1138436 glenda sys 10209 Feb 16 09:25 sys/src/cmd/iostats/iostats.c /n/sourcesdump/2006/0216/plan9/sys/src/cmd/iostats/iostats.c:146,151 - /n/sourcesdump/2006/0217/plan9/sys/src/cmd/iostats/iostats.c:146,153 for(n = 0; n < Maxrpc; n++) stats->rpc[n].lo = 10000000000LL; + fmtinstall('M', dirmodefmt); + fmtinstall('D', dirfmt); fmtinstall('F', fcallfmt); if(chdir("/") < 0) /n/sourcesdump/2006/0216/plan9/sys/src/cmd/iostats/iostats.c:496,509 - /n/sourcesdump/2006/0217/plan9/sys/src/cmd/iostats/iostats.c:498,543 exits("fatal"); } + char* + rdenv(char *v, char **end) + { + int fd, n; + char *buf; + Dir *d; + if((fd = open(v, OREAD)) == -1) + return nil; + d = dirfstat(fd); + if(d == nil || (buf = malloc(d->length + 1)) == nil) + return nil; + n = (int)d->length; + n = read(fd, buf, n); + close(fd); + if(n <= 0){ + free(buf); + buf = nil; + }else{ + if(buf[n-1] != '\0') + buf[n++] = '\0'; + *end = &buf[n]; + } + free(d); + return buf; + } + + char Defaultpath[] = ".\0/bin"; void runprog(char *argv[]) { - char arg0[128]; + char *path, *ep, *p; + char arg0[256]; - exec(argv[0], argv); - if (*argv[0] != '/' && strncmp(argv[0],"./",2) != 0) { - sprint(arg0, "/bin/%s", argv[0]); + path = rdenv("/env/path", &ep); + if(path == nil){ + path = Defaultpath; + ep = path+sizeof(Defaultpath); + } + for(p = path; p < ep; p += strlen(p)+1){ + snprint(arg0, sizeof arg0, "%s/%s", p, argv[0]); exec(arg0, argv); } fatal("exec"); [rsc] --rw-rw-r-- M 1138436 glenda sys 2626 Feb 16 09:25 sys/src/cmd/iostats/statfs.h /n/sourcesdump/2006/0216/plan9/sys/src/cmd/iostats/statfs.h:96,102 - /n/sourcesdump/2006/0217/plan9/sys/src/cmd/iostats/statfs.h:96,102 enum { - Nr_workbufs = 16, + Nr_workbufs = 40, Dsegpad = 8192, Fidchunk = 1000, };