From 0831222a9135e0074b71d8f3890f94fdc78d61dc Mon Sep 17 00:00:00 2001 From: akr Date: Fri, 15 Feb 2008 18:48:27 +0000 Subject: [PATCH] * encoding.c (rb_enc_nth): moved to string.c. * string.c (rb_enc_nth): moved from string.c. use search_nonascii for ASCII compatible string. (str_nth): wrong optimization removed to fix "a".force_encoding("EUC-JP").slice!(0,10) returns "a\x00\x00\x00\x00\x00\x00\x00\x00\x00" git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++++++ encoding.c | 22 ---------------------- string.c | 53 +++++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a9c78de89..86e66e0042 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Sat Feb 16 03:43:18 2008 Tanaka Akira + + * encoding.c (rb_enc_nth): moved to string.c. + + * string.c (rb_enc_nth): moved from string.c. use search_nonascii + for ASCII compatible string. + (str_nth): wrong optimization removed to fix + "a".force_encoding("EUC-JP").slice!(0,10) returns + "a\x00\x00\x00\x00\x00\x00\x00\x00\x00" + Sat Feb 16 00:21:49 2008 Nobuyoshi Nakada * range.c (rb_range_beg_len): check if responds to "begin" and "end" diff --git a/encoding.c b/encoding.c index 77d3f996d7..5a8369b6f3 100644 --- a/encoding.c +++ b/encoding.c @@ -720,28 +720,6 @@ rb_obj_encoding(VALUE obj) return rb_enc_from_encoding(enc); } - -char* -rb_enc_nth(const char *p, const char *e, int nth, rb_encoding *enc) -{ - int c; - - if (rb_enc_mbmaxlen(enc) == 1) { - p += nth; - } - else if (rb_enc_mbmaxlen(enc) == rb_enc_mbminlen(enc)) { - p += nth * rb_enc_mbmaxlen(enc); - } - else { - for (c=0; p e) p = e; + return (char*)p; +} + static char* str_nth(const char *p, const char *e, int nth, rb_encoding *enc, int singlebyte) { if (singlebyte) p += nth; else { - if (rb_enc_asciicompat(enc)) { - const char *p2 = search_nonascii(p, e); - - if (!p2 || p + nth < p2) - return (char*)p + nth; - nth -= p2 - p; - p = p2; - } p = rb_enc_nth(p, e, nth, enc); } if (!p) return 0;