From 66b91ed17f7e2bf444bd35019d38031ed23ee786 Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka Date: Mon, 3 Mar 2014 21:43:48 +0900 Subject: [PATCH] grep: avoid to add same character to a bracket expression * src/main.c (trivial_ignore_case): Only when uppercase and/or lowercase is different from original character, add it to new pattern. --- src/main.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main.c b/src/main.c index 14b7be2..1e7c79d 100644 --- a/src/main.c +++ b/src/main.c @@ -1933,15 +1933,20 @@ trivial_case_ignore (size_t len, char const *keys, memcpy (p, orig, n); p += n; - size_t lcbytes = WCRTOMB (p, lc, &mb_state); - if (lcbytes == (size_t) -1) - goto skip_case_ignore_optimization; - p += lcbytes; - - size_t ucbytes = WCRTOMB (p, uc, &mb_state); - if (ucbytes == (size_t) -1 || ! mbsinit (&mb_state)) - goto skip_case_ignore_optimization; - p += ucbytes; + if (lc != wc) + { + size_t lcbytes = WCRTOMB (p, lc, &mb_state); + if (lcbytes == (size_t) -1) + goto skip_case_ignore_optimization; + p += lcbytes; + } + if (uc != wc) + { + size_t ucbytes = WCRTOMB (p, uc, &mb_state); + if (ucbytes == (size_t) -1 || ! mbsinit (&mb_state)) + goto skip_case_ignore_optimization; + p += ucbytes; + } *p++ = ']'; } -- 1.8.5.2