summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-30 14:14:46 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-30 14:14:46 +0000
commit321346cfa5fca9da246d83588fbaae2f79fc6069 (patch)
treebb54c08733787e0d4d631c7d625fb224877bbf24 /io.c
parentcf310f97416686e93841e202462c8bb60fb332e6 (diff)
* io.c (rb_io_each_byte): rbuf can be refreshed during yield.
[Bug #5119] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/io.c b/io.c
index a1742637df..5fa8ba7aa8 100644
--- a/io.c
+++ b/io.c
@@ -2829,13 +2829,10 @@ rb_io_each_byte(VALUE io)
GetOpenFile(io, fptr);
for (;;) {
- p = fptr->rbuf.ptr+fptr->rbuf.off;
- e = p + fptr->rbuf.len;
- while (p < e) {
- fptr->rbuf.off++;
- fptr->rbuf.len--;
+ while (fptr->rbuf.len > 0) {
+ p = fptr->rbuf.ptr + fptr->rbuf.off++;
+ e = p + fptr->rbuf.len--;
rb_yield(INT2FIX(*p & 0xff));
- p++;
errno = 0;
}
rb_io_check_byte_readable(fptr);