|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)what3.c 4.2 (Berkeley) 5/11/89"; ! 3: #endif ! 4: ! 5: #include "what..c" ! 6: #include "pathnames.h" ! 7: ! 8: doclook(argc, argv, colevel) ! 9: char *argv[]; ! 10: { ! 11: int fpa[2], fpb[2], fpc[2], pid1, pid2, st; ! 12: int iarg; ! 13: char *s; ! 14: FILE *ansf; ! 15: struct filans *af; ! 16: struct stat statbuf; ! 17: # define RD 0 ! 18: # define WR 1 ! 19: # define fmv(x,y) close(y); dup(x); close(x); ! 20: /* we want to run chkbib and then lhunt and pipe in & out */ ! 21: pipe (fpa); /* from this program to chkbib */ ! 22: pipe (fpb); /* from chkbib to lhunt */ ! 23: pipe (fpc); /* from lhunt to us */ ! 24: if ( (pid1 = fork()) ==0) ! 25: { ! 26: fmv(fpa[RD], 0); ! 27: fmv(fpb[WR], 1); ! 28: close(fpa[WR]); ! 29: close(fpb[RD]); ! 30: close(fpc[RD]); ! 31: close(fpc[WR]); ! 32: execl(_PATH_MKEY, "mkey", "-s", 0); ! 33: _assert(0); ! 34: } ! 35: if ( (pid2 = fork()) == 0) ! 36: { ! 37: char coarg[20]; ! 38: sprintf(coarg, "-C%d", colevel); ! 39: fmv(fpb[RD], 0); ! 40: fmv(fpc[WR], 1); ! 41: close(fpa[RD]); ! 42: close(fpa[WR]); ! 43: close(fpb[WR]); ! 44: close(fpc[RD]); ! 45: execl(_PATH_HUNT, "hunt", ! 46: /* "-P", */ ! 47: coarg, "-Ty", "-Fn", _PATH_ALL, 0); ! 48: _assert(0); ! 49: } ! 50: _assert (pid1 != -1); ! 51: _assert(pid2 != -1); ! 52: close(fpb[RD]); ! 53: close(fpb[WR]); ! 54: close(fpa[RD]); ! 55: close(fpc[WR]); ! 56: ansf = fopen(_PATH_DEVNULL, "r"); ! 57: fmv (fpc[RD], ansf->_file); ! 58: for(iarg=1; iarg<argc; iarg++) ! 59: prod(fpa[WR], argv[iarg]); ! 60: close(fpa[WR]); ! 61: s=fnames; ! 62: af=files; ! 63: while (af < files+NFILES) ! 64: { ! 65: if (fgets(af->nm=s, NAMES, ansf)==0) ! 66: break; ! 67: trimnl(s); ! 68: if (*s==0) continue; ! 69: while (*s++); ! 70: _assert(s<fnames+NAMES); ! 71: st = stat(af->nm, &statbuf); ! 72: if (st<0) continue; ! 73: af->uid = statbuf.st_uid; ! 74: af->fdate = statbuf.st_mtime; ! 75: af->size = statbuf.st_size; ! 76: af++; ! 77: } ! 78: fclose(ansf); ! 79: return(af-files); ! 80: } ! 81: ! 82: prod(f,s) ! 83: char *s; ! 84: { ! 85: write (f, s, strlen(s)); ! 86: write (f, "\n", 1); ! 87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.