version 1.27, 2004/04/02 18:39:36 |
version 1.28, 2004/05/07 14:51:42 |
|
|
if (pat[len - 1] == '\n') |
if (pat[len - 1] == '\n') |
--len; |
--len; |
/* pat may not be NUL-terminated */ |
/* pat may not be NUL-terminated */ |
if (wflag) { |
if (wflag && !Fflag) { |
int bol = 0, eol = 0; |
int bol = 0, eol = 0; |
if (pat[0] == '^') |
if (pat[0] == '^') |
bol = 1; |
bol = 1; |
|
|
fclose(f); |
fclose(f); |
} |
} |
|
|
static void |
|
free_patterns(void) |
|
{ |
|
int i; |
|
|
|
for (i = 0; i < patterns; i++) { |
|
if (fg_pattern[i].pattern) |
|
free(fg_pattern[i].pattern); |
|
else |
|
regfree(&r_pattern[i]); |
|
free(pattern[i]); |
|
} |
|
|
|
free(fg_pattern); |
|
free(r_pattern); |
|
free(pattern); |
|
} |
|
|
|
int |
int |
main(int argc, char *argv[]) |
main(int argc, char *argv[]) |
{ |
{ |
|
|
|
|
if (Eflag) |
if (Eflag) |
cflags |= REG_EXTENDED; |
cflags |= REG_EXTENDED; |
else if (Fflag) |
|
cflags |= REG_NOSPEC; |
|
fg_pattern = grep_malloc(patterns * sizeof(*fg_pattern)); |
fg_pattern = grep_malloc(patterns * sizeof(*fg_pattern)); |
r_pattern = grep_malloc(patterns * sizeof(*r_pattern)); |
r_pattern = grep_malloc(patterns * sizeof(*r_pattern)); |
for (i = 0; i < patterns; ++i) { |
for (i = 0; i < patterns; ++i) { |
/* Check if cheating is allowed */ |
/* Check if cheating is allowed (always is for fgrep). */ |
if (fastcomp(&fg_pattern[i], pattern[i])) { |
if (Fflag) { |
/* Fall back to full regex library */ |
fgrepcomp(&fg_pattern[i], pattern[i]); |
if ((c = regcomp(&r_pattern[i], pattern[i], cflags))) { |
} else { |
regerror(c, &r_pattern[i], re_error, |
if (fastcomp(&fg_pattern[i], pattern[i])) { |
RE_ERROR_BUF); |
/* Fall back to full regex library */ |
errx(2, "%s", re_error); |
c = regcomp(&r_pattern[i], pattern[i], cflags); |
|
if (c != 0) { |
|
regerror(c, &r_pattern[i], re_error, |
|
RE_ERROR_BUF); |
|
errx(2, "%s", re_error); |
|
} |
} |
} |
} |
} |
} |
} |
|
|
else |
else |
for (c = 0; argc--; ++argv) |
for (c = 0; argc--; ++argv) |
c += procfile(*argv); |
c += procfile(*argv); |
|
|
free_patterns(); |
|
|
|
exit(!c); |
exit(!c); |
} |
} |