зеркало из https://github.com/github/ruby.git
* io.c (copy_stream_fallback_body): use read method unless readpartial
is available. [ruby-dev:36124] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19148 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
07e08245d3
Коммит
6c2108e2ac
|
@ -1,3 +1,8 @@
|
|||
Fri Sep 5 18:37:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* io.c (copy_stream_fallback_body): use read method unless readpartial
|
||||
is available. [ruby-dev:36124]
|
||||
|
||||
Fri Sep 5 18:16:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* ext/iconv/iconv.c (iconv_create): strips glibc style option before
|
||||
|
|
12
io.c
12
io.c
|
@ -7216,6 +7216,13 @@ copy_stream_fallback_body(VALUE arg)
|
|||
VALUE buf = rb_str_buf_new(buflen);
|
||||
long rest = stp->copy_length;
|
||||
off_t off = stp->src_offset;
|
||||
ID read_method = id_readpartial;
|
||||
|
||||
if (stp->src_fd == -1) {
|
||||
if (!rb_respond_to(stp->src, read_method)) {
|
||||
read_method = id_read;
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
long numwrote;
|
||||
|
@ -7229,7 +7236,7 @@ copy_stream_fallback_body(VALUE arg)
|
|||
l = buflen < rest ? buflen : rest;
|
||||
}
|
||||
if (stp->src_fd == -1) {
|
||||
rb_funcall(stp->src, id_readpartial, 2, INT2FIX(l), buf);
|
||||
rb_funcall(stp->src, read_method, 2, INT2FIX(l), buf);
|
||||
}
|
||||
else {
|
||||
ssize_t ss;
|
||||
|
@ -7248,6 +7255,9 @@ copy_stream_fallback_body(VALUE arg)
|
|||
numwrote = NUM2LONG(n);
|
||||
stp->total += numwrote;
|
||||
rest -= numwrote;
|
||||
if (read_method == id_read && RSTRING_LEN(buf) == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return Qnil;
|
||||
|
|
|
@ -977,8 +977,8 @@ end
|
|||
@f = f
|
||||
end
|
||||
|
||||
def read(n)
|
||||
@f.read(n)
|
||||
def read(*args)
|
||||
@f.read(*args)
|
||||
end
|
||||
|
||||
def write(str)
|
||||
|
|
Загрузка…
Ссылка в новой задаче