From 0eeeb2ef4c3183e094a9b4b546bee28068d5113d Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 3 Dec 2004 09:30:33 +0000 Subject: * eval.c (proc_invoke): copy arguments to frame.argv. [ruby-core:03861] * object.c (convert_type): use rb_respond_to() again. [ruby-dev:25021] * eval.c (rb_respond_to): funcall respond_to? if it's redefined. [ruby-dev:25021] * io.c (rb_file_initialize): [ruby-dev:25032] * lib/ostruct.rb (OpenStruct::Marshaler): OpenStruct can be marshaled again. [ruby-core:03862] * io.c (rb_io_ctl): [ruby-dev:25019] * io.c (io_fread): need not to null terminate. [ruby-dev:24998] * io.c (read_all): remove unnecessary rb_str_resize(). [ruby-dev:24996] * io.c (io_read): ditto. * io.c (rb_io_sysread): use temporary lock. [ruby-dev:24992] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@7447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index 04e8d572b..a3164363e 100644 --- a/io.c +++ b/io.c @@ -2177,13 +2177,19 @@ rb_io_sysread(argc, argv, io) if (READ_DATA_BUFFERED(fptr->f)) { rb_raise(rb_eIOError, "sysread for buffered IO"); } + rb_str_locktmp(str); + n = fileno(fptr->f); rb_thread_wait_fd(fileno(fptr->f)); rb_io_check_closed(fptr); + if (RSTRING(str)->len != ilen) { + rb_raise(rb_eRuntimeError, "buffer string modified"); + } TRAP_BEG; - n = read(fileno(fptr->f), RSTRING(str)->ptr, RSTRING(str)->len); + n = read(fileno(fptr->f), RSTRING(str)->ptr, ilen); TRAP_END; + rb_str_unlocktmp(str); if (n == -1) { rb_sys_fail(fptr->path); } @@ -3867,9 +3873,7 @@ rb_file_initialize(argc, argv, io) VALUE io; { if (RFILE(io)->fptr) { - rb_io_close_m(io); - free(RFILE(io)->fptr); - RFILE(io)->fptr = 0; + rb_raise(rb_eRuntimeError, "reinitializing File"); } if (0 < argc && argc < 3) { VALUE fd = rb_check_convert_type(argv[0], T_FIXNUM, "Fixnum", "to_int"); @@ -4477,7 +4481,6 @@ rb_io_ctl(io, req, arg, io_p) int retval; rb_secure(2); - GetOpenFile(io, fptr); if (NIL_P(arg) || arg == Qfalse) { narg = 0; @@ -4518,6 +4521,7 @@ rb_io_ctl(io, req, arg, io_p) narg = (long)RSTRING(arg)->ptr; } } + GetOpenFile(io, fptr); retval = io_cntl(fileno(fptr->f), cmd, narg, io_p); if (retval < 0) rb_sys_fail(fptr->path); if (TYPE(arg) == T_STRING && RSTRING(arg)->ptr[len] != 17) { -- cgit