| 139 |
|
|
| 140 |
static char *include_pattern = NULL; |
static char *include_pattern = NULL; |
| 141 |
static char *exclude_pattern = NULL; |
static char *exclude_pattern = NULL; |
| 142 |
|
static char *include_dir_pattern = NULL; |
| 143 |
|
static char *exclude_dir_pattern = NULL; |
| 144 |
|
|
| 145 |
static pcre *include_compiled = NULL; |
static pcre *include_compiled = NULL; |
| 146 |
static pcre *exclude_compiled = NULL; |
static pcre *exclude_compiled = NULL; |
| 147 |
|
static pcre *include_dir_compiled = NULL; |
| 148 |
|
static pcre *exclude_dir_compiled = NULL; |
| 149 |
|
|
| 150 |
static int after_context = 0; |
static int after_context = 0; |
| 151 |
static int before_context = 0; |
static int before_context = 0; |
| 185 |
/* Options without a single-letter equivalent get a negative value. This can be |
/* Options without a single-letter equivalent get a negative value. This can be |
| 186 |
used to identify them. */ |
used to identify them. */ |
| 187 |
|
|
| 188 |
#define N_COLOUR (-1) |
#define N_COLOUR (-1) |
| 189 |
#define N_EXCLUDE (-2) |
#define N_EXCLUDE (-2) |
| 190 |
#define N_HELP (-3) |
#define N_EXCLUDE_DIR (-3) |
| 191 |
#define N_INCLUDE (-4) |
#define N_HELP (-4) |
| 192 |
#define N_LABEL (-5) |
#define N_INCLUDE (-5) |
| 193 |
#define N_LOCALE (-6) |
#define N_INCLUDE_DIR (-6) |
| 194 |
#define N_NULL (-7) |
#define N_LABEL (-7) |
| 195 |
#define N_LOFFSETS (-8) |
#define N_LOCALE (-8) |
| 196 |
#define N_FOFFSETS (-9) |
#define N_NULL (-9) |
| 197 |
|
#define N_LOFFSETS (-10) |
| 198 |
|
#define N_FOFFSETS (-11) |
| 199 |
|
|
| 200 |
static option_item optionlist[] = { |
static option_item optionlist[] = { |
| 201 |
{ OP_NODATA, N_NULL, NULL, "", " terminate options" }, |
{ OP_NODATA, N_NULL, NULL, "", " terminate options" }, |
| 228 |
{ OP_NODATA, 'r', NULL, "recursive", "recursively scan sub-directories" }, |
{ OP_NODATA, 'r', NULL, "recursive", "recursively scan sub-directories" }, |
| 229 |
{ OP_STRING, N_EXCLUDE,&exclude_pattern, "exclude=pattern","exclude matching files when recursing" }, |
{ OP_STRING, N_EXCLUDE,&exclude_pattern, "exclude=pattern","exclude matching files when recursing" }, |
| 230 |
{ OP_STRING, N_INCLUDE,&include_pattern, "include=pattern","include matching files when recursing" }, |
{ OP_STRING, N_INCLUDE,&include_pattern, "include=pattern","include matching files when recursing" }, |
| 231 |
|
{ OP_STRING, N_EXCLUDE_DIR,&exclude_dir_pattern, "exclude_dir=pattern","exclude matching directories when recursing" }, |
| 232 |
|
{ OP_STRING, N_INCLUDE_DIR,&include_dir_pattern, "include_dir=pattern","include matching directories when recursing" }, |
| 233 |
#ifdef JFRIEDL_DEBUG |
#ifdef JFRIEDL_DEBUG |
| 234 |
{ OP_OP_NUMBER, 'S', &S_arg, "jeffS", "replace matched (sub)string with X" }, |
{ OP_OP_NUMBER, 'S', &S_arg, "jeffS", "replace matched (sub)string with X" }, |
| 235 |
#endif |
#endif |
| 1369 |
} |
} |
| 1370 |
|
|
| 1371 |
/* If the file is a directory, skip if skipping or if we are recursing, scan |
/* If the file is a directory, skip if skipping or if we are recursing, scan |
| 1372 |
each file within it, subject to any include or exclude patterns that were set. |
each file and directory within it, subject to any include or exclude patterns |
| 1373 |
The scanning code is localized so it can be made system-specific. */ |
that were set. The scanning code is localized so it can be made |
| 1374 |
|
system-specific. */ |
| 1375 |
|
|
| 1376 |
if ((sep = isdirectory(pathname)) != 0) |
if ((sep = isdirectory(pathname)) != 0) |
| 1377 |
{ |
{ |
| 1396 |
sprintf(buffer, "%.512s%c%.128s", pathname, sep, nextfile); |
sprintf(buffer, "%.512s%c%.128s", pathname, sep, nextfile); |
| 1397 |
nflen = strlen(nextfile); |
nflen = strlen(nextfile); |
| 1398 |
|
|
| 1399 |
if (!isdirectory(buffer)) |
if (isdirectory(buffer)) |
| 1400 |
|
{ |
| 1401 |
|
if (exclude_dir_compiled != NULL && |
| 1402 |
|
pcre_exec(exclude_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) >= 0) |
| 1403 |
|
continue; |
| 1404 |
|
|
| 1405 |
|
if (include_dir_compiled != NULL && |
| 1406 |
|
pcre_exec(include_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) < 0) |
| 1407 |
|
continue; |
| 1408 |
|
} |
| 1409 |
|
else |
| 1410 |
{ |
{ |
| 1411 |
if (exclude_compiled != NULL && |
if (exclude_compiled != NULL && |
| 1412 |
pcre_exec(exclude_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) >= 0) |
pcre_exec(exclude_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) >= 0) |
| 2311 |
} |
} |
| 2312 |
} |
} |
| 2313 |
|
|
| 2314 |
|
if (exclude_dir_pattern != NULL) |
| 2315 |
|
{ |
| 2316 |
|
exclude_dir_compiled = pcre_compile(exclude_dir_pattern, 0, &error, &errptr, |
| 2317 |
|
pcretables); |
| 2318 |
|
if (exclude_dir_compiled == NULL) |
| 2319 |
|
{ |
| 2320 |
|
fprintf(stderr, "pcregrep: Error in 'exclude_dir' regex at offset %d: %s\n", |
| 2321 |
|
errptr, error); |
| 2322 |
|
goto EXIT2; |
| 2323 |
|
} |
| 2324 |
|
} |
| 2325 |
|
|
| 2326 |
|
if (include_dir_pattern != NULL) |
| 2327 |
|
{ |
| 2328 |
|
include_dir_compiled = pcre_compile(include_dir_pattern, 0, &error, &errptr, |
| 2329 |
|
pcretables); |
| 2330 |
|
if (include_dir_compiled == NULL) |
| 2331 |
|
{ |
| 2332 |
|
fprintf(stderr, "pcregrep: Error in 'include_dir' regex at offset %d: %s\n", |
| 2333 |
|
errptr, error); |
| 2334 |
|
goto EXIT2; |
| 2335 |
|
} |
| 2336 |
|
} |
| 2337 |
|
|
| 2338 |
/* If there are no further arguments, do the business on stdin and exit. */ |
/* If there are no further arguments, do the business on stdin and exit. */ |
| 2339 |
|
|
| 2340 |
if (i >= argc) |
if (i >= argc) |