[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Changes to grep/src/search.c
From: |
Stepan Kasal |
Subject: |
Changes to grep/src/search.c |
Date: |
Thu, 16 Dec 2004 02:32:34 -0500 |
Index: grep/src/search.c
diff -u grep/src/search.c:1.29 grep/src/search.c:1.30
--- grep/src/search.c:1.29 Mon Nov 22 13:40:56 2004
+++ grep/src/search.c Thu Dec 16 07:18:15 2004
@@ -153,14 +153,16 @@
{
char *mb_properties = xmalloc(size);
mbstate_t cur_state;
+ wchar_t wc;
int i;
memset(&cur_state, 0, sizeof(mbstate_t));
memset(mb_properties, 0, sizeof(char)*size);
+
for (i = 0; i < size ;)
{
size_t mbclen;
- mbclen = mbrlen(buf + i, size - i, &cur_state);
+ mbclen = mbrtowc(&wc, buf + i, size - i, &cur_state);
if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
{
@@ -168,6 +170,14 @@
We treat it as a singlebyte character. */
mbclen = 1;
}
+ else if (match_icase)
+ {
+ if (iswupper((wint_t)wc))
+ {
+ wc = towlower((wint_t)wc);
+ wcrtomb(buf + i, wc, &cur_state);
+ }
+ }
mb_properties[i] = mbclen;
i += mbclen;
}
@@ -342,14 +352,20 @@
char eol = eolbyte;
int backref, start, len;
struct kwsmatch kwsm;
- size_t i;
+ size_t i, ret_val;
#ifdef MBS_SUPPORT
char *mb_properties = NULL;
-#endif /* MBS_SUPPORT */
-
-#ifdef MBS_SUPPORT
- if (MB_CUR_MAX > 1 && kwset)
- mb_properties = check_multibyte_string(buf, size);
+ if (MB_CUR_MAX > 1)
+ {
+ if (match_icase)
+ {
+ char *case_buf = malloc(size);
+ memcpy(case_buf, buf, size);
+ buf = case_buf;
+ }
+ if (kwset)
+ mb_properties = check_multibyte_string(buf, size);
+ }
#endif /* MBS_SUPPORT */
buflim = buf + size;
@@ -366,8 +382,12 @@
{
#ifdef MBS_SUPPORT
if (MB_CUR_MAX > 1)
- free(mb_properties);
-#endif
+ {
+ if (match_icase)
+ free ((char*)buf);
+ free(mb_properties);
+ }
+#endif /* MBS_SUPPORT */
return (size_t)-1;
}
beg += offset;
@@ -465,18 +485,29 @@
} /* for Regex patterns. */
} /* for (beg = end ..) */
#ifdef MBS_SUPPORT
- if (MB_CUR_MAX > 1 && mb_properties)
- free (mb_properties);
+ if (MB_CUR_MAX > 1)
+ {
+ if (match_icase)
+ free((char*)buf);
+ if (mb_properties)
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
return (size_t) -1;
success:
+ ret_val = beg - buf;
#ifdef MBS_SUPPORT
- if (MB_CUR_MAX > 1 && mb_properties)
- free (mb_properties);
+ if (MB_CUR_MAX > 1)
+ {
+ if (match_icase)
+ free((char*)buf);
+ if (mb_properties)
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
*match_size = end - beg;
- return beg - buf;
+ return ret_val;
}
static void
@@ -509,10 +540,19 @@
register size_t len;
char eol = eolbyte;
struct kwsmatch kwsmatch;
+ size_t ret_val;
#ifdef MBS_SUPPORT
- char *mb_properties;
+ char *mb_properties = NULL;
if (MB_CUR_MAX > 1)
- mb_properties = check_multibyte_string (buf, size);
+ {
+ if (match_icase)
+ {
+ char *case_buf = malloc(size);
+ memcpy(case_buf, buf, size);
+ buf = case_buf;
+ }
+ mb_properties = check_multibyte_string(buf, size);
+ }
#endif /* MBS_SUPPORT */
for (beg = buf; beg <= buf + size; ++beg)
@@ -521,8 +561,12 @@
if (offset == (size_t) -1)
{
#ifdef MBS_SUPPORT
- if (MB_CUR_MAX > 1)
- free(mb_properties);
+ if (MB_CUR_MAX > 1)
+ {
+ if (match_icase)
+ free ((char*)buf);
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
return offset;
}
@@ -535,11 +579,16 @@
if (exact)
{
*match_size = len;
+ ret_val = beg - buf;
#ifdef MBS_SUPPORT
- if (MB_CUR_MAX > 1)
- free (mb_properties);
+ if (MB_CUR_MAX > 1)
+ {
+ if (match_icase)
+ free ((char*)buf);
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
- return beg - buf;
+ return ret_val;
}
if (match_lines)
{
@@ -560,8 +609,12 @@
if (offset == (size_t) -1)
{
#ifdef MBS_SUPPORT
- if (MB_CUR_MAX > 1)
- free (mb_properties);
+ if (MB_CUR_MAX > 1)
+ {
+ if (match_icase)
+ free ((char*)buf);
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
return offset;
}
@@ -577,7 +630,12 @@
#ifdef MBS_SUPPORT
if (MB_CUR_MAX > 1)
- free (mb_properties);
+ {
+ if (match_icase)
+ free((char*)buf);
+ if (mb_properties)
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
return -1;
@@ -587,11 +645,17 @@
while (buf < beg && beg[-1] != eol)
--beg;
*match_size = end - beg;
+ ret_val = beg - buf;
#ifdef MBS_SUPPORT
if (MB_CUR_MAX > 1)
- free (mb_properties);
+ {
+ if (match_icase)
+ free((char*)buf);
+ if (mb_properties)
+ free(mb_properties);
+ }
#endif /* MBS_SUPPORT */
- return beg - buf;
+ return ret_val;
}
#if HAVE_LIBPCRE
- Changes to grep/src/search.c,
Stepan Kasal <=