| 6 |
its pattern matching. On a Unix or Win32 system it can recurse into |
its pattern matching. On a Unix or Win32 system it can recurse into |
| 7 |
directories. |
directories. |
| 8 |
|
|
| 9 |
Copyright (c) 1997-2009 University of Cambridge |
Copyright (c) 1997-2010 University of Cambridge |
| 10 |
|
|
| 11 |
----------------------------------------------------------------------------- |
----------------------------------------------------------------------------- |
| 12 |
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
| 104 |
|
|
| 105 |
enum { EL_LF, EL_CR, EL_CRLF, EL_ANY, EL_ANYCRLF }; |
enum { EL_LF, EL_CR, EL_CRLF, EL_ANY, EL_ANYCRLF }; |
| 106 |
|
|
| 107 |
|
/* In newer versions of gcc, with FORTIFY_SOURCE set (the default in some |
| 108 |
|
environments), a warning is issued if the value of fwrite() is ignored. |
| 109 |
|
Unfortunately, casting to (void) does not suppress the warning. To get round |
| 110 |
|
this, we use a macro that compiles a fudge. Oddly, this does not also seem to |
| 111 |
|
apply to fprintf(). */ |
| 112 |
|
|
| 113 |
|
#define FWRITE(a,b,c,d) if (fwrite(a,b,c,d)) {} |
| 114 |
|
|
| 115 |
|
|
| 116 |
|
|
| 117 |
/************************************************* |
/************************************************* |
| 821 |
if (printname != NULL) fprintf(stdout, "%s-", printname); |
if (printname != NULL) fprintf(stdout, "%s-", printname); |
| 822 |
if (number) fprintf(stdout, "%d-", lastmatchnumber++); |
if (number) fprintf(stdout, "%d-", lastmatchnumber++); |
| 823 |
pp = end_of_line(pp, endptr, &ellength); |
pp = end_of_line(pp, endptr, &ellength); |
| 824 |
fwrite(lastmatchrestart, 1, pp - lastmatchrestart, stdout); |
FWRITE(lastmatchrestart, 1, pp - lastmatchrestart, stdout); |
| 825 |
lastmatchrestart = pp; |
lastmatchrestart = pp; |
| 826 |
} |
} |
| 827 |
hyphenpending = TRUE; |
hyphenpending = TRUE; |
| 862 |
fprintf(stderr, "pcregrep: pcre_exec() error %d while matching ", *mrc); |
fprintf(stderr, "pcregrep: pcre_exec() error %d while matching ", *mrc); |
| 863 |
if (pattern_count > 1) fprintf(stderr, "pattern number %d to ", i+1); |
if (pattern_count > 1) fprintf(stderr, "pattern number %d to ", i+1); |
| 864 |
fprintf(stderr, "this text:\n"); |
fprintf(stderr, "this text:\n"); |
| 865 |
fwrite(matchptr, 1, length, stderr); /* In case binary zero included */ |
FWRITE(matchptr, 1, length, stderr); /* In case binary zero included */ |
| 866 |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
| 867 |
if (error_count == 0 && |
if (error_count == 0 && |
| 868 |
(*mrc == PCRE_ERROR_MATCHLIMIT || *mrc == PCRE_ERROR_RECURSIONLIMIT)) |
(*mrc == PCRE_ERROR_MATCHLIMIT || *mrc == PCRE_ERROR_RECURSIONLIMIT)) |
| 1103 |
else |
else |
| 1104 |
{ |
{ |
| 1105 |
if (do_colour) fprintf(stdout, "%c[%sm", 0x1b, colour_string); |
if (do_colour) fprintf(stdout, "%c[%sm", 0x1b, colour_string); |
| 1106 |
fwrite(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout); |
FWRITE(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout); |
| 1107 |
if (do_colour) fprintf(stdout, "%c[00m", 0x1b); |
if (do_colour) fprintf(stdout, "%c[00m", 0x1b); |
| 1108 |
} |
} |
| 1109 |
fprintf(stdout, "\n"); |
fprintf(stdout, "\n"); |
| 1145 |
if (printname != NULL) fprintf(stdout, "%s-", printname); |
if (printname != NULL) fprintf(stdout, "%s-", printname); |
| 1146 |
if (number) fprintf(stdout, "%d-", lastmatchnumber++); |
if (number) fprintf(stdout, "%d-", lastmatchnumber++); |
| 1147 |
pp = end_of_line(pp, endptr, &ellength); |
pp = end_of_line(pp, endptr, &ellength); |
| 1148 |
fwrite(lastmatchrestart, 1, pp - lastmatchrestart, stdout); |
FWRITE(lastmatchrestart, 1, pp - lastmatchrestart, stdout); |
| 1149 |
lastmatchrestart = pp; |
lastmatchrestart = pp; |
| 1150 |
} |
} |
| 1151 |
if (lastmatchrestart != ptr) hyphenpending = TRUE; |
if (lastmatchrestart != ptr) hyphenpending = TRUE; |
| 1185 |
if (printname != NULL) fprintf(stdout, "%s-", printname); |
if (printname != NULL) fprintf(stdout, "%s-", printname); |
| 1186 |
if (number) fprintf(stdout, "%d-", linenumber - linecount--); |
if (number) fprintf(stdout, "%d-", linenumber - linecount--); |
| 1187 |
pp = end_of_line(pp, endptr, &ellength); |
pp = end_of_line(pp, endptr, &ellength); |
| 1188 |
fwrite(p, 1, pp - p, stdout); |
FWRITE(p, 1, pp - p, stdout); |
| 1189 |
p = pp; |
p = pp; |
| 1190 |
} |
} |
| 1191 |
} |
} |
| 1235 |
{ |
{ |
| 1236 |
int first = S_arg * 2; |
int first = S_arg * 2; |
| 1237 |
int last = first + 1; |
int last = first + 1; |
| 1238 |
fwrite(ptr, 1, offsets[first], stdout); |
FWRITE(ptr, 1, offsets[first], stdout); |
| 1239 |
fprintf(stdout, "X"); |
fprintf(stdout, "X"); |
| 1240 |
fwrite(ptr + offsets[last], 1, linelength - offsets[last], stdout); |
FWRITE(ptr + offsets[last], 1, linelength - offsets[last], stdout); |
| 1241 |
} |
} |
| 1242 |
else |
else |
| 1243 |
#endif |
#endif |
| 1248 |
if (do_colour) |
if (do_colour) |
| 1249 |
{ |
{ |
| 1250 |
int last_offset = 0; |
int last_offset = 0; |
| 1251 |
fwrite(ptr, 1, offsets[0], stdout); |
FWRITE(ptr, 1, offsets[0], stdout); |
| 1252 |
fprintf(stdout, "%c[%sm", 0x1b, colour_string); |
fprintf(stdout, "%c[%sm", 0x1b, colour_string); |
| 1253 |
fwrite(ptr + offsets[0], 1, offsets[1] - offsets[0], stdout); |
FWRITE(ptr + offsets[0], 1, offsets[1] - offsets[0], stdout); |
| 1254 |
fprintf(stdout, "%c[00m", 0x1b); |
fprintf(stdout, "%c[00m", 0x1b); |
| 1255 |
for (;;) |
for (;;) |
| 1256 |
{ |
{ |
| 1258 |
matchptr += offsets[1]; |
matchptr += offsets[1]; |
| 1259 |
length -= offsets[1]; |
length -= offsets[1]; |
| 1260 |
if (!match_patterns(matchptr, length, offsets, &mrc)) break; |
if (!match_patterns(matchptr, length, offsets, &mrc)) break; |
| 1261 |
fwrite(matchptr, 1, offsets[0], stdout); |
FWRITE(matchptr, 1, offsets[0], stdout); |
| 1262 |
fprintf(stdout, "%c[%sm", 0x1b, colour_string); |
fprintf(stdout, "%c[%sm", 0x1b, colour_string); |
| 1263 |
fwrite(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout); |
FWRITE(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout); |
| 1264 |
fprintf(stdout, "%c[00m", 0x1b); |
fprintf(stdout, "%c[00m", 0x1b); |
| 1265 |
} |
} |
| 1266 |
fwrite(ptr + last_offset, 1, (linelength + endlinelength) - last_offset, |
FWRITE(ptr + last_offset, 1, |
| 1267 |
stdout); |
(linelength + endlinelength) - last_offset, stdout); |
| 1268 |
} |
} |
| 1269 |
|
|
| 1270 |
/* Not colouring; no need to search for further matches */ |
/* Not colouring; no need to search for further matches */ |
| 1271 |
|
|
| 1272 |
else fwrite(ptr, 1, linelength + endlinelength, stdout); |
else FWRITE(ptr, 1, linelength + endlinelength, stdout); |
| 1273 |
} |
} |
| 1274 |
|
|
| 1275 |
/* End of doing what has to be done for a match */ |
/* End of doing what has to be done for a match */ |