diff options
Diffstat (limited to 'src/kwsearch.c')
-rw-r--r-- | src/kwsearch.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/src/kwsearch.c b/src/kwsearch.c index ead4a0e3..8911f3f3 100644 --- a/src/kwsearch.c +++ b/src/kwsearch.c @@ -32,21 +32,19 @@ static kwset_t kwset; void Fcompile (char const *pattern, size_t size) { - char const *beg, *end, *lim, *err, *pat; - size_t psize; + char const *err; + size_t psize = size; + char const *pat = (MBS_SUPPORT && match_icase && MB_CUR_MAX > 1 + ? mbtolower (pattern, &psize) + : pattern); kwsinit (&kwset); - psize = size; -#if MBS_SUPPORT - if (match_icase && MB_CUR_MAX > 1) - pat = mbtolower (pattern, &psize); - else -#endif - pat = pattern; - beg = pat; + char const *beg = pat; do { + char const *lim; + char const *end; for (lim = beg;; ++lim) { end = lim; @@ -85,8 +83,7 @@ Fexecute (char const *buf, size_t size, size_t *match_size, char eol = eolbyte; struct kwsmatch kwsmatch; size_t ret_val; -#if MBS_SUPPORT - if (MB_CUR_MAX > 1) + if (MBS_SUPPORT && MB_CUR_MAX > 1) { if (match_icase) { @@ -96,7 +93,6 @@ Fexecute (char const *buf, size_t size, size_t *match_size, buf = case_buf; } } -#endif /* MBS_SUPPORT */ for (mb_start = beg = start_ptr ? start_ptr : buf; beg <= buf + size; beg++) { @@ -104,9 +100,9 @@ Fexecute (char const *buf, size_t size, size_t *match_size, if (offset == (size_t) -1) goto failure; len = kwsmatch.size[0]; -#if MBS_SUPPORT - if (MB_CUR_MAX > 1 && is_mb_middle (&mb_start, beg + offset, buf + size, - len)) + if (MBS_SUPPORT + && MB_CUR_MAX > 1 + && is_mb_middle (&mb_start, beg + offset, buf + size, len)) { /* The match was a part of multibyte character, advance at least one byte to ensure no infinite loop happens. */ @@ -120,7 +116,6 @@ Fexecute (char const *buf, size_t size, size_t *match_size, beg += mb_len - 1; continue; } -#endif /* MBS_SUPPORT */ beg += offset; if (start_ptr && !match_words) goto success_in_beg_and_len; |