* 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:
nobu 2008-09-05 09:37:55 +00:00
Родитель 07e08245d3
Коммит 6c2108e2ac
3 изменённых файлов: 18 добавлений и 3 удалений

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

@ -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
Просмотреть файл

@ -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)