summaryrefslogtreecommitdiff
path: root/sprintf.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-17 05:01:47 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-17 05:01:47 +0000
commit5a41626dea072a4493984f05ba3aa032919da70d (patch)
treef18d0dd53e1e51d02dac1c133cb2e43e1f60de8e /sprintf.c
parent17f4486abc48c427a0cf2f5cd984df1ca541bc33 (diff)
* string.c (tr_find): wrong condition fixed.
* sprintf.c (rb_str_format): check encoding based on result, not the format string. * string.c (rb_str_upto): add encoding check. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'sprintf.c')
-rw-r--r--sprintf.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sprintf.c b/sprintf.c
index 0835dab3d1..f005ad6af4 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -296,6 +296,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
blen = 0;
bsiz = 120;
result = rb_str_buf_new(bsiz);
+ rb_enc_copy(result, fmt);
buf = RSTRING_PTR(result);
for (; p < end; p++) {
@@ -459,7 +460,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
str = rb_obj_as_string(arg);
if (OBJ_TAINTED(str)) tainted = 1;
len = RSTRING_LEN(str);
- enc = rb_enc_check(fmt, str);
+ enc = rb_enc_check(result, str);
if (flags&(FPREC|FWIDTH)) {
slen = rb_enc_strlen(RSTRING_PTR(str),RSTRING_END(str),enc);
if (slen < 0) {
@@ -497,6 +498,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
}
}
PUSH(RSTRING_PTR(str), len);
+ rb_enc_associate(result, enc);
}
break;