зеркало из https://github.com/github/ruby.git
* sprintf.c (rb_str_format): should preserve format encoding
before raising CompatibilityError. [ruby-list:46274] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
e666111955
Коммит
5703c1756c
|
@ -1,3 +1,8 @@
|
|||
Wed Aug 12 08:39:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* sprintf.c (rb_str_format): should preserve format encoding
|
||||
before raising CompatibilityError. [ruby-list:46274]
|
||||
|
||||
Wed Aug 12 07:41:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* encoding.c (rb_enc_compatible): If a string is empty and
|
||||
|
|
10
sprintf.c
10
sprintf.c
|
@ -482,6 +482,10 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
|
||||
for (t = p; t < end && *t != '%'; t++) ;
|
||||
PUSH(p, t - p);
|
||||
if (coderange != ENC_CODERANGE_BROKEN && scanned < blen) {
|
||||
scanned = rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &coderange);
|
||||
ENC_CODERANGE_SET(result, coderange);
|
||||
}
|
||||
if (t >= end) {
|
||||
/* end of fmt string */
|
||||
goto sprint_exit;
|
||||
|
@ -673,7 +677,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
(cr == ENC_CODERANGE_UNKNOWN ?
|
||||
ENC_CODERANGE_BROKEN : (coderange = cr)));
|
||||
}
|
||||
enc = rb_enc_check(result, str);
|
||||
enc = rb_enc_check((RSTRING_LEN(result) == 0 ? fmt : result), str);
|
||||
if (flags&(FPREC|FWIDTH)) {
|
||||
slen = rb_enc_strlen(RSTRING_PTR(str),RSTRING_END(str),enc);
|
||||
if (slen < 0) {
|
||||
|
@ -1055,10 +1059,6 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
if (RTEST(ruby_debug)) rb_raise(rb_eArgError, "%s", mesg);
|
||||
if (RTEST(ruby_verbose)) rb_warn("%s", mesg);
|
||||
}
|
||||
if (scanned < blen) {
|
||||
rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &coderange);
|
||||
ENC_CODERANGE_SET(result, coderange);
|
||||
}
|
||||
rb_str_resize(result, blen);
|
||||
|
||||
if (tainted) OBJ_TAINT(result);
|
||||
|
|
Загрузка…
Ссылка в новой задаче