Lines 305-315
Link Here
|
305 |
int backref, start, len; |
305 |
int backref, start, len; |
306 |
struct kwsmatch kwsm; |
306 |
struct kwsmatch kwsm; |
307 |
size_t i, ret_val; |
307 |
size_t i, ret_val; |
|
|
308 |
static int use_dfa; |
309 |
static int use_dfa_checked = 0; |
308 |
#ifdef MBS_SUPPORT |
310 |
#ifdef MBS_SUPPORT |
309 |
mbstate_t mbs; |
311 |
mbstate_t mbs; |
310 |
memset (&mbs, '\0', sizeof (mbstate_t)); |
312 |
memset (&mbs, '\0', sizeof (mbstate_t)); |
311 |
#endif /* MBS_SUPPORT */ |
313 |
#endif /* MBS_SUPPORT */ |
312 |
|
314 |
|
|
|
315 |
if (!use_dfa_checked) |
316 |
{ |
317 |
char *grep_use_dfa = getenv ("GREP_USE_DFA"); |
318 |
if (!grep_use_dfa) |
319 |
{ |
320 |
#ifdef MBS_SUPPORT |
321 |
/* Turn off DFA when processing multibyte input. */ |
322 |
use_dfa = (MB_CUR_MAX == 1); |
323 |
#else |
324 |
use_dfa = 1; |
325 |
#endif /* MBS_SUPPORT */ |
326 |
} |
327 |
else |
328 |
{ |
329 |
use_dfa = atoi (grep_use_dfa); |
330 |
} |
331 |
|
332 |
use_dfa_checked = 1; |
333 |
} |
334 |
|
313 |
buflim = buf + size; |
335 |
buflim = buf + size; |
314 |
|
336 |
|
315 |
for (beg = end = buf; end < buflim; beg = end) |
337 |
for (beg = end = buf; end < buflim; beg = end) |
Lines 365-371
Link Here
|
365 |
--beg; |
387 |
--beg; |
366 |
if (kwsm.index < kwset_exact_matches) |
388 |
if (kwsm.index < kwset_exact_matches) |
367 |
goto success_in_beg_and_end; |
389 |
goto success_in_beg_and_end; |
368 |
if (dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1) |
390 |
if (use_dfa && |
|
|
391 |
dfaexec (&dfa, beg, end - beg, &backref) == (size_t) -1) |
369 |
continue; |
392 |
continue; |
370 |
} |
393 |
} |
371 |
else |
394 |
else |
Lines 374-380
Link Here
|
374 |
#ifdef MBS_SUPPORT |
397 |
#ifdef MBS_SUPPORT |
375 |
size_t bytes_left = 0; |
398 |
size_t bytes_left = 0; |
376 |
#endif /* MBS_SUPPORT */ |
399 |
#endif /* MBS_SUPPORT */ |
377 |
size_t offset = dfaexec (&dfa, beg, buflim - beg, &backref); |
400 |
size_t offset = 0; |
|
|
401 |
if (use_dfa) |
402 |
offset = dfaexec (&dfa, beg, buflim - beg, &backref); |
378 |
if (offset == (size_t) -1) |
403 |
if (offset == (size_t) -1) |
379 |
break; |
404 |
break; |
380 |
/* Narrow down to the line we've found. */ |
405 |
/* Narrow down to the line we've found. */ |
Lines 416-422
Link Here
|
416 |
--beg; |
441 |
--beg; |
417 |
} |
442 |
} |
418 |
/* Successful, no backreferences encountered! */ |
443 |
/* Successful, no backreferences encountered! */ |
419 |
if (!backref) |
444 |
if (use_dfa && !backref) |
420 |
goto success_in_beg_and_end; |
445 |
goto success_in_beg_and_end; |
421 |
} |
446 |
} |
422 |
else |
447 |
else |