* io.c (rb_io_each_codepoint): read directly when readconv is

needed but internal encoding is not set.  [ruby-core:28650]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2010-03-14 19:41:32 +00:00
Родитель ad130d3670
Коммит 32ed00ab18
3 изменённых файлов: 23 добавлений и 3 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Mon Mar 15 04:41:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (rb_io_each_codepoint): read directly when readconv is
needed but internal encoding is not set. [ruby-core:28650]
Mon Mar 15 04:18:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* tool/file2lastrev.rb (VCS::{SVN,GIT}#get_revisions):

11
io.c
Просмотреть файл

@ -2895,9 +2895,14 @@ rb_io_each_codepoint(VALUE io)
rb_enc_name(fptr->encs.enc));
}
n = MBCLEN_CHARFOUND_LEN(r);
c = rb_enc_codepoint(fptr->cbuf+fptr->cbuf_off,
fptr->cbuf+fptr->cbuf_off+fptr->cbuf_len,
fptr->encs.enc);
if (fptr->encs.enc) {
c = rb_enc_codepoint(fptr->cbuf+fptr->cbuf_off,
fptr->cbuf+fptr->cbuf_off+fptr->cbuf_len,
fptr->encs.enc);
}
else {
c = (unsigned char)fptr->cbuf[fptr->cbuf_off];
}
fptr->cbuf_off += n;
fptr->cbuf_len -= n;
rb_yield(UINT2NUM(c));

Просмотреть файл

@ -150,6 +150,16 @@ class TestIO < Test::Unit::TestCase
r.close
end
def test_each_codepoint
t = make_tempfile
bug2959 = '[ruby-core:28650]'
a = ""
File.open(t, 'rt') {|f|
f.each_codepoint {|c| a << c}
}
assert_equal("foo\nbar\nbaz\n", a, bug2959)
end
def test_rubydev33072
assert_raise(Errno::ENOENT, "[ruby-dev:33072]") do
File.read("empty", nil, nil, {})