aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io.c')
-rw-r--r--io.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/io.c b/io.c
index 0cd715798c..b9b2c78f3c 100644
--- a/io.c
+++ b/io.c
@@ -334,6 +334,7 @@ io_fflush(f, fptr)
if (n != EOF) break;
if (!rb_io_wait_writable(fileno(f)))
rb_sys_fail(fptr->path);
+ rb_io_check_closed(fptr);
}
fptr->mode &= ~FMODE_WBUF;
}
@@ -1027,6 +1028,7 @@ rb_io_fread(ptr, len, f)
of.f = f;
of.f2 = NULL;
+ of.mode = FMODE_READABLE;
return io_fread(ptr, len, &of);
}
@@ -4030,6 +4032,9 @@ rb_io_initialize(argc, argv, io)
fp->mode = rb_io_modenum_flags(flags);
fp->f = rb_fdopen(fd, rb_io_modenum_mode(flags));
}
+ else if (RFILE(io)->fptr) {
+ rb_raise(rb_eRuntimeError, "reinitializing IO");
+ }
else {
GetOpenFile(orig, ofp);
if (ofp->refcnt == LONG_MAX) {
@@ -4047,11 +4052,6 @@ rb_io_initialize(argc, argv, io)
}
}
}
- if (RFILE(io)->fptr) {
- rb_io_close(io);
- free(RFILE(io)->fptr);
- RFILE(io)->fptr = 0;
- }
ofp->refcnt++;
RFILE(io)->fptr = ofp;
}