aboutsummaryrefslogtreecommitdiff
path: root/posix/regex.c
diff options
context:
space:
mode:
Diffstat (limited to 'posix/regex.c')
-rw-r--r--posix/regex.c55
1 files changed, 44 insertions, 11 deletions
diff --git a/posix/regex.c b/posix/regex.c
index ee38fdf..5424f04 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -1284,7 +1284,11 @@ convert_mbs_to_wcs (dest, src, len, offset_buffer, is_binary)
for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed,
psrc += consumed)
{
+#ifdef _LIBC
+ consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs);
+#else
consumed = mbrtowc (pdest, psrc, mb_remain, &mbs);
+#endif
if (consumed <= 0)
/* failed to convert. maybe src contains binary data.
@@ -6333,8 +6337,13 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
& ~(uintptr_t)(__alignof__(wctype_t) - 1);
wctype = *((wctype_t*)alignedp);
workp += CHAR_CLASS_SIZE;
+# ifdef _LIBC
+ if (__iswctype((wint_t)c, wctype))
+ goto char_set_matched;
+# else
if (iswctype((wint_t)c, wctype))
goto char_set_matched;
+# endif
}
/* match with collating_symbol? */
@@ -6370,12 +6379,16 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
for (workp2 = workp + coll_symbol_length ; workp < workp2 ;)
{
const CHAR_T *backup_d = d, *backup_dend = dend;
- length = wcslen(workp);
+# ifdef _LIBC
+ length = __wcslen (workp);
+# else
+ length = wcslen (workp);
+# endif
/* If wcscoll(the collating symbol, whole string) > 0,
any substring of the string never match with the
collating symbol. */
- if (wcscoll(workp, d) > 0)
+ if (__wcscoll (workp, d) > 0)
{
workp += length + 1;
continue;
@@ -6400,7 +6413,11 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
str_buf[i] = TRANSLATE(*d);
str_buf[i+1] = '\0';
- match = wcscoll(workp, str_buf);
+# ifdef _LIBC
+ match = __wcscoll (workp, str_buf);
+# else
+ match = wcscoll (workp, str_buf);
+# endif
if (match == 0)
goto char_set_matched;
@@ -6511,12 +6528,20 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
for (workp2 = workp + equiv_class_length ; workp < workp2 ;)
{
const CHAR_T *backup_d = d, *backup_dend = dend;
- length = wcslen(workp);
+# ifdef _LIBC
+ length = __wcslen (workp);
+# else
+ length = wcslen (workp);
+# endif
/* If wcscoll(the collating symbol, whole string) > 0,
any substring of the string never match with the
collating symbol. */
- if (wcscoll(workp, d) > 0)
+# ifdef _LIBC
+ if (__wcscoll (workp, d) > 0)
+# else
+ if (wcscoll (workp, d) > 0)
+# endif
{
workp += length + 1;
break;
@@ -6541,7 +6566,11 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
str_buf[i] = TRANSLATE(*d);
str_buf[i+1] = '\0';
- match = wcscoll(workp, str_buf);
+# ifdef _LIBC
+ match = __wcscoll (workp, str_buf);
+# else
+ match = wcscoll (workp, str_buf);
+# endif
if (match == 0)
goto char_set_matched;
@@ -6564,7 +6593,7 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
}
/* match with char_range? */
-#ifdef _LIBC
+# ifdef _LIBC
if (nrules != 0)
{
uint32_t collseqval;
@@ -6587,7 +6616,7 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
}
}
else
-#endif
+# endif
{
/* We set range_start_char at str_buf[0], range_end_char
at str_buf[4], and compared char at str_buf[2]. */
@@ -6623,9 +6652,13 @@ byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos,
range_end_char = str_buf + 4;
}
- if (wcscoll(range_start_char, str_buf+2) <= 0 &&
- wcscoll(str_buf+2, range_end_char) <= 0)
-
+# ifdef _LIBC
+ if (__wcscoll (range_start_char, str_buf+2) <= 0
+ && __wcscoll (str_buf+2, range_end_char) <= 0)
+# else
+ if (wcscoll (range_start_char, str_buf+2) <= 0
+ && wcscoll (str_buf+2, range_end_char) <= 0)
+# endif
goto char_set_matched;
}
}