Skip to content

Commit

Permalink
* io.c (copy_stream_fallback_body): use read method unless readpartial
Browse files Browse the repository at this point in the history
  is available.  [ruby-dev:36124]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19148 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nobu committed Sep 5, 2008
1 parent 07e0824 commit 6c2108e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 3 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
Fri Sep 5 18:37:52 2008 Nobuyoshi Nakada <[email protected]>

* 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 <[email protected]>

* ext/iconv/iconv.c (iconv_create): strips glibc style option before
Expand Down
12 changes: 11 additions & 1 deletion io.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions test/fileutils/test_fileutils.rb
Original file line number Diff line number Diff line change
Expand Up @@ -977,8 +977,8 @@ def initialize(f)
@f = f
end

def read(n)
@f.read(n)
def read(*args)
@f.read(*args)
end

def write(str)
Expand Down

0 comments on commit 6c2108e

Please sign in to comment.