int extsearch( pat, filedesc )
char *pat;
int filedesc;
{ int offs, i, m, nb, nr;
char buff[BUFSIZ], *p;
m = strlen(pat);
if( m == 0 ) return( 0 );
if( m >= BUFSIZ )
return( -2 ); /*** Buffer is too small ***/
/*** Assume that the file is open and positioned ***/
offs = 0; /*** number of characters already read ***/
nb = 0; /*** number of characters in buffer ***/
while( TRUE ) {
if( nb >= m ) {
/*** try to match ***/
p = search(pat,buff);
if( p != NULL )
return( p-buff+offs ); /*** found ***/
for( i=0; i < m; i++ ) buff[i] = buff[i+nb-m+1];
offs += nb-m+1;
nb = m-1;
}
/*** read more text ***/
nr = read( filedesc, buff+nb, BUFSIZ-1-nb );
if( nr <= 0 ) return( -1 ); /*** not found ***/
nb += nr;
buff[nb] = EOS;
}
}
|