* io.c (rb_io_putc): support multibyte characters.

[ruby-core:30697]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2010-10-12 06:18:11 +00:00
parent e960fffda1
commit 0a8f047a98
4 changed files with 28 additions and 3 deletions

View File

@ -1,3 +1,8 @@
Tue Oct 12 15:14:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
* io.c (rb_io_putc): support multibyte characters.
[ruby-core:30697]
Tue Oct 12 15:10:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
* numeric.c (rb_enc_uint_chr): split from int_chr.

4
NEWS
View File

@ -40,6 +40,10 @@ with all sufficient information, see the ChangeLog file.
* extended methods:
* Time#strftime supports %:z and %::z.
* IO
* extended methods:
* IO#putc supports multibyte characters
* io/console
* new methods:
* IO#noecho {|io| }

12
io.c
View File

@ -6053,9 +6053,15 @@ rb_f_print(int argc, VALUE *argv)
static VALUE
rb_io_putc(VALUE io, VALUE ch)
{
char c = NUM2CHR(ch);
rb_io_write(io, rb_str_new(&c, 1));
VALUE str;
if (TYPE(ch) == T_STRING) {
str = rb_str_substr(ch, 0, 1);
}
else {
char c = NUM2CHR(ch);
str = rb_str_new(&c, 1);
}
rb_io_write(io, str);
return ch;
}

View File

@ -1026,6 +1026,16 @@ EOT
}
end
def test_open_pipe_r_enc2
open("|#{EnvUtil.rubybin} -e 'putc ?\u3042'", "r:UTF-8") {|f|
assert_equal(Encoding::UTF_8, f.external_encoding)
assert_equal(nil, f.internal_encoding)
s = f.read
assert_equal(Encoding::UTF_8, s.encoding)
assert_equal("\u3042", s)
}
end
def test_s_foreach_enc
with_tmpdir {
generate_file("t", "\xff")