зеркало из https://github.com/github/ruby.git
io.c: truncate before appending
* io.c (read_all): truncate the buffer before appending read data, instead of truncating before reading. [ruby-core:55951] [Bug #8625] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
635178762d
Коммит
0e7cd6417a
|
@ -1,3 +1,9 @@
|
|||
Sat Jun 7 12:51:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* io.c (read_all): truncate the buffer before appending read data,
|
||||
instead of truncating before reading.
|
||||
[ruby-core:55951] [Bug #8625]
|
||||
|
||||
Sat Jun 7 12:28:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* ext/digest/digest.c (rb_digest_instance_equal): no need to call
|
||||
|
|
4
io.c
4
io.c
|
@ -2398,23 +2398,27 @@ read_all(rb_io_t *fptr, long siz, VALUE str)
|
|||
int cr;
|
||||
|
||||
if (NEED_READCONV(fptr)) {
|
||||
int first = !NIL_P(str);
|
||||
SET_BINARY_MODE(fptr);
|
||||
io_setstrbuf(&str,0);
|
||||
make_readconv(fptr, 0);
|
||||
while (1) {
|
||||
VALUE v;
|
||||
if (fptr->cbuf.len) {
|
||||
if (first) rb_str_set_len(str, first = 0);
|
||||
io_shift_cbuf(fptr, fptr->cbuf.len, &str);
|
||||
}
|
||||
v = fill_cbuf(fptr, 0);
|
||||
if (v != MORE_CHAR_SUSPENDED && v != MORE_CHAR_FINISHED) {
|
||||
if (fptr->cbuf.len) {
|
||||
if (first) rb_str_set_len(str, first = 0);
|
||||
io_shift_cbuf(fptr, fptr->cbuf.len, &str);
|
||||
}
|
||||
rb_exc_raise(v);
|
||||
}
|
||||
if (v == MORE_CHAR_FINISHED) {
|
||||
clear_readconv(fptr);
|
||||
if (first) rb_str_set_len(str, first = 0);
|
||||
return io_enc_str(str, fptr);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,4 +13,17 @@ class TestPipe < Test::Unit::TestCase
|
|||
r.close
|
||||
end
|
||||
end
|
||||
class WithConversion < self
|
||||
def open_file(content)
|
||||
r, w = IO.pipe
|
||||
w << content
|
||||
w.close
|
||||
r.set_encoding("us-ascii:utf-8")
|
||||
begin
|
||||
yield r
|
||||
ensure
|
||||
r.close
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче