diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-12-05 20:37:25 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-12-05 20:37:25 +0200 |
commit | 6b9ed56f74baa4af529e100dff19afcd23ed7cd8 (patch) | |
tree | 9e66902f2792d6e2216a8020805a14b6cccbc028 /builtin.c | |
parent | 16458663c3bdf640e3352653ea94a89fb2949ad4 (diff) | |
download | egawk-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.c | 26 |
1 files changed, 18 insertions, 8 deletions
@@ -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. */ |