|
|
1.1 ! root 1: # include "stdio.h" ! 2: # define SAME 0 ! 3: # include "assert.h" ! 4: # define FGCT 10 ! 5: # define FGSIZE 150 ! 6: char *calloc(); ! 7: int keepold = 1; /* keep old things for fgrep search */ ! 8: char fgspace[FGSIZE]; ! 9: char *fgp = fgspace; ! 10: char *fgnames[FGCT]; ! 11: char **fgnamp = fgnames; ! 12: findline(argin, out, outlen, indexdate) ! 13: long indexdate; ! 14: char *argin, *out; ! 15: { ! 16: static char name[100] =""; ! 17: char *p, **ftp, *in; ! 18: extern long gdate(); ! 19: static FILE *fa= NULL; ! 20: long lp, llen; ! 21: int len, k, nofil; ! 22: ! 23: # if D1 ! 24: fprintf(stderr, "findline: %s\n", argin); ! 25: # endif ! 26: in = calloc(strlen(argin)+1,1); ! 27: assert(in!=0); ! 28: strcpy(in, argin); ! 29: if (mindex(in, '!')) ! 30: return(remote(in, out)); ! 31: nofil = in[0]==0; ! 32: for(p=in; *p && *p != ':' && *p != ';'; p++) ! 33: ; ! 34: if (*p) *p++=0; ! 35: else p=in; ! 36: k = sscanf(p, "%ld,%ld", &lp, &llen); ! 37: # ifdef D1 ! 38: fprintf(stderr, "p %s k %d lp %ld llen %ld\n",p,k,lp,llen); ! 39: # endif ! 40: if (k<2) ! 41: { ! 42: lp = 0; ! 43: llen=outlen; ! 44: } ! 45: # ifdef D1 ! 46: fprintf(stderr, "lp %ld llen %ld\n",lp, llen); ! 47: # endif ! 48: # ifdef D1 ! 49: fprintf(stderr, "fa now %o, p %o in %o %s\n",fa, p,in,in); ! 50: # endif ! 51: if (nofil) ! 52: { ! 53: # if D1 ! 54: fprintf(stderr, "set fa to stdin\n"); ! 55: # endif ! 56: fa = stdin; ! 57: } ! 58: else ! 59: if (strcmp (name, in) != 0 || 1) ! 60: { ! 61: # if D1 ! 62: fprintf(stderr, "old: %s new %s not equal\n",name,in); ! 63: # endif ! 64: if (fa != NULL) ! 65: fa = freopen(in, "r", fa); ! 66: else ! 67: fa = fopen(in, "r"); ! 68: # if D1 ! 69: if (fa==NULL) fprintf(stderr, "failed to (re)open *%s*\n",in); ! 70: # endif ! 71: if (fa == NULL) ! 72: return(0); ! 73: /* err("Can't open %s", in); */ ! 74: strcpy(name, in); ! 75: if (gdate(fa) > indexdate && indexdate != 0) ! 76: { ! 77: if (keepold) ! 78: { ! 79: for(ftp=fgnames; ftp<fgnamp; ftp++) ! 80: if (strcmp(*ftp, name)==SAME) ! 81: return(0); ! 82: strcpy (*fgnamp++ = fgp, name); ! 83: assert(fgnamp<fgnames+FGCT); ! 84: while (*fgp && *fgp!=':') ! 85: fgp++; ! 86: *fgp++ = 0; ! 87: assert (fgp<fgspace+FGSIZE); ! 88: return(0); ! 89: } ! 90: fprintf(stderr, "Warning: index predates file '%s'\n", name); ! 91: } ! 92: } ! 93: # if D1 ! 94: else ! 95: fprintf(stderr, "old %s new %s same fa %o\n", name,in,fa); ! 96: # endif ! 97: if (fa != NULL) ! 98: { ! 99: fseek (fa, lp, 0); ! 100: len = (llen >= outlen) ? outlen-1 : llen; ! 101: len = fread (out, 1, len, fa); ! 102: out[len] = 0; ! 103: # ifdef D1 ! 104: fprintf(stderr, "length as read is %d\n",len); ! 105: # endif ! 106: } ! 107: return(len); ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.