Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 93443 | Differences between
and this patch

Collapse All | Expand All

(-)grep-2.5.1/src/search.c (-3 / +28 lines)
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

Return to bug 93443