39 lines
1.1 KiB
Diff
39 lines
1.1 KiB
Diff
|
From 3fca11d78cfa1fec6199936d57871b9db08226ab Mon Sep 17 00:00:00 2001
|
||
|
From: Paolo Bonzini <bonzini@gnu.org>
|
||
|
Date: Thu, 29 Apr 2010 17:13:32 +0200
|
||
|
Subject: [PATCH 2/2] fall back to glibc matcher if a MBCSET is found
|
||
|
|
||
|
This patch works around the performance problems of multibyte grep
|
||
|
upstream.
|
||
|
|
||
|
For UTF-8 it should trigger only in the presence of MBCSET, e.g. [a-z].
|
||
|
|
||
|
For other character sets all brackets and `.` as well will trigger it.
|
||
|
---
|
||
|
src/dfa.c | 9 +++++++++
|
||
|
1 files changed, 9 insertions(+), 0 deletions(-)
|
||
|
|
||
|
diff --git a/src/dfa.c b/src/dfa.c
|
||
|
index e13c361..523fe05 100644
|
||
|
--- a/src/dfa.c
|
||
|
+++ b/src/dfa.c
|
||
|
@@ -2927,6 +2927,15 @@ dfaexec (struct dfa *d, char const *begin, char *end,
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
+ if (backref)
|
||
|
+ {
|
||
|
+ *backref = 1;
|
||
|
+ free(mblen_buf);
|
||
|
+ free(inputwcs);
|
||
|
+ *end = saved_end;
|
||
|
+ return (char *) p;
|
||
|
+ }
|
||
|
+
|
||
|
/* Can match with a multibyte character (and multi character
|
||
|
collating element). Transition table might be updated. */
|
||
|
s = transit_state(d, s, &p);
|
||
|
--
|
||
|
1.6.6.1
|
||
|
|