From 6e4c85364fa7f8ffdb9d0eb7d10febbc471a4b93 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 8 Oct 2002 05:34:45 +0000 Subject: * io.c (io_write): must check returned value from fwrite() before test with ferror(). (ruby-bugs-ja:PR#350) git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index ccb00739c..025e73d32 100644 --- a/io.c +++ b/io.c @@ -366,17 +366,15 @@ io_write(io, str) ptr = RSTRING(str)->ptr; n = RSTRING(str)->len; - do { #ifdef __human68k__ + do { if (fputc(*ptr++, f) == EOF) { if (ferror(f)) rb_sys_fail(fptr->path); break; } - --n; + } while (--n > 0); #else - r = fwrite(ptr, 1, n, f); - ptr += r; - n -= r; + for (; (r = fwrite(ptr, 1, n, f)) < n; ptr += r, n -= r) { if (ferror(f)) { if (rb_io_wait_writable(fileno(f))) { clearerr(f); @@ -384,8 +382,8 @@ io_write(io, str) } rb_sys_fail(fptr->path); } + } #endif - } while (n > 0); n = ptr - RSTRING(str)->ptr; if (fptr->mode & FMODE_SYNC) { io_fflush(f, fptr); -- cgit