aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2010-12-05 20:37:25 +0200
committerArnold D. Robbins <arnold@skeeve.com>2010-12-05 20:37:25 +0200
commit6b9ed56f74baa4af529e100dff19afcd23ed7cd8 (patch)
tree9e66902f2792d6e2216a8020805a14b6cccbc028 /builtin.c
parent16458663c3bdf640e3352653ea94a89fb2949ad4 (diff)
downloadegawk-6b9ed56f74baa4af529e100dff19afcd23ed7cd8.tar.gz
egawk-6b9ed56f74baa4af529e100dff19afcd23ed7cd8.tar.bz2
egawk-6b9ed56f74baa4af529e100dff19afcd23ed7cd8.zip
More doc and code fixes. See ChangeLogs.
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/builtin.c b/builtin.c
index 3fed1178..268656bc 100644
--- a/builtin.c
+++ b/builtin.c
@@ -240,17 +240,27 @@ strncasecmpmbs(const char *s1, const char *s2, size_t n)
memset(& mbs2, 0, sizeof(mbs2));
for (i1 = i2 = 0 ; i1 < n && i2 < n ;i1 += mbclen1, i2 += mbclen2) {
- mbclen1 = mbrtowc(& wc1, s1 + i1, n - i1, & mbs1);
- if (mbclen1 == (size_t) -1 || mbclen1 == (size_t) -2 || mbclen1 == 0) {
- /* We treat it as a singlebyte character. */
+ if (is_valid_character(s1[i1])) {
mbclen1 = 1;
- wc1 = s1[i1];
+ wc1 = btowc_cache[s1[i1]];
+ } else {
+ mbclen1 = mbrtowc(& wc1, s1 + i1, n - i1, & mbs1);
+ if (mbclen1 == (size_t) -1 || mbclen1 == (size_t) -2 || mbclen1 == 0) {
+ /* We treat it as a singlebyte character. */
+ mbclen1 = 1;
+ wc1 = btowc_cache[s1[i1]];
+ }
}
- mbclen2 = mbrtowc(& wc2, s2 + i2, n - i2, & mbs2);
- if (mbclen2 == (size_t) -1 || mbclen2 == (size_t) -2 || mbclen2 == 0) {
- /* We treat it as a singlebyte character. */
+ if (is_valid_character(s2[i2])) {
mbclen2 = 1;
- wc2 = s2[i2];
+ wc2 = btowc_cache[s2[i2]];
+ } else {
+ mbclen2 = mbrtowc(& wc2, s2 + i2, n - i2, & mbs2);
+ if (mbclen2 == (size_t) -1 || mbclen2 == (size_t) -2 || mbclen2 == 0) {
+ /* We treat it as a singlebyte character. */
+ mbclen2 = 1;
+ wc2 = btowc_cache[s2[i2]];
+ }
}
if ((gap = towlower(wc1) - towlower(wc2)) != 0)
/* s1 and s2 are not equivalent. */