diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-05 19:34:15 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-05 19:34:15 +0000 |
commit | 98cbcf1bd7909306d2ba542aaff2eceb71ccb5c1 (patch) | |
tree | f11be1c581b236746c37c811bf9a858fa5491b3d /string.c | |
parent | 579f16d9851fc220a1dda9a0d65e611cc37aeb14 (diff) | |
download | ruby-98cbcf1bd7909306d2ba542aaff2eceb71ccb5c1.tar.gz |
* string.c (count_utf8_lead_bytes_with_ulong): fix shift size.
[ruby-dev:33993]
* string.c (str_utf8_nth) fix wrong counting.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -763,7 +763,7 @@ count_utf8_lead_bytes_with_ulong(const unsigned long *s) unsigned long d = *s; d |= ~(d>>1); d >>= 6; - d &= NONASCII_MASK >> 3; + d &= NONASCII_MASK >> 7; d += (d>>8); d += (d>>16); #if NONASCII_MASK == 0x8080808080808080UL @@ -1177,11 +1177,10 @@ str_utf8_nth(const char *p, const char *e, int nth) if (is_utf8_lead_byte(*p)) nth--; p++; } - while (s < t) { + do { nth -= count_utf8_lead_bytes_with_ulong(s); - if (nth < sizeof(long)) break; s++; - } + } while (s < t && sizeof(long) <= nth); p = (char *)s; } if (0 < nth) { |