version 1.24, 2004/02/04 18:38:52 |
version 1.25, 2004/05/07 14:51:42 |
|
|
* Returns: -1 on failure, 0 on success |
* Returns: -1 on failure, 0 on success |
*/ |
*/ |
int |
int |
|
fgrepcomp(fastgrep_t *fg, const char *pattern) |
|
{ |
|
int i; |
|
|
|
/* Initialize. */ |
|
fg->patternLen = strlen(pattern); |
|
fg->bol = 0; |
|
fg->eol = 0; |
|
fg->wmatch = wflag; |
|
fg->reversedSearch = 0; |
|
|
|
/* |
|
* Make a copy and upper case it for later if in -i mode, |
|
* else just copy the pointer. |
|
*/ |
|
if (iflag) { |
|
fg->pattern = grep_malloc(fg->patternLen + 1); |
|
for (i = 0; i < fg->patternLen; i++) |
|
fg->pattern[i] = toupper(pattern[i]); |
|
fg->pattern[fg->patternLen] = '\0'; |
|
} else |
|
fg->pattern = (char *)pattern; /* really const */ |
|
|
|
/* Preprocess pattern. */ |
|
for (i = 0; i <= UCHAR_MAX; i++) |
|
fg->qsBc[i] = fg->patternLen; |
|
for (i = 1; i < fg->patternLen; i++) { |
|
fg->qsBc[fg->pattern[i]] = fg->patternLen - i; |
|
/* |
|
* If case is ignored, make the jump apply to both upper and |
|
* lower cased characters. As the pattern is stored in upper |
|
* case, apply the same to the lower case equivalents. |
|
*/ |
|
if (iflag) |
|
fg->qsBc[tolower(fg->pattern[i])] = fg->patternLen - i; |
|
} |
|
|
|
return (0); |
|
} |
|
|
|
/* |
|
* Returns: -1 on failure, 0 on success |
|
*/ |
|
int |
fastcomp(fastgrep_t *fg, const char *pattern) |
fastcomp(fastgrep_t *fg, const char *pattern) |
{ |
{ |
int i; |
int i; |
|
|
int firstLastHalfDot = -1; |
int firstLastHalfDot = -1; |
int lastHalfDot = 0; |
int lastHalfDot = 0; |
|
|
if (Fflag) { |
|
fg->pattern = NULL; |
|
return (-1); |
|
} |
|
|
|
/* Initialize. */ |
/* Initialize. */ |
origPatternLen = fg->patternLen = strlen(pattern); |
origPatternLen = fg->patternLen = strlen(pattern); |
fg->bol = 0; |
fg->bol = 0; |
|
|
int i; |
int i; |
|
|
for (i = 0; i < len; i++) { |
for (i = 0; i < len; i++) { |
if (((pattern[i] == data[i]) || (pattern[i] == '.')) || |
if (((pattern[i] == data[i]) || (!Fflag && pattern[i] == '.')) |
(iflag && pattern[i] == toupper(data[i]))) |
|| (iflag && pattern[i] == toupper(data[i]))) |
continue; |
continue; |
return (i); |
return (i); |
} |
} |