ruby-changes:14956
From: mame <ko1@a...>
Date: Sat, 6 Mar 2010 13:55:28 +0900 (JST)
Subject: [ruby-changes:14956] Ruby:r26827 (trunk): * io.c (rb_io_s_write, rb_io_s_binwrite): delete File#write and
mame 2010-03-06 13:52:31 +0900 (Sat, 06 Mar 2010) New Revision: 26827 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26827 Log: * io.c (rb_io_s_write, rb_io_s_binwrite): delete File#write and #binwrite. It may take a long time to make them stable, so 1.9.2 should not include them. We need refactoring to implement them again. * test/ruby/test_io.rb: delete tests for them. Modified files: trunk/ChangeLog trunk/io.c trunk/test/ruby/test_io.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 26826) +++ ChangeLog (revision 26827) @@ -1,3 +1,12 @@ +Sat Mar 6 13:45:37 2010 Yusuke Endoh <mame@t...> + + * io.c (rb_io_s_write, rb_io_s_binwrite): delete File#write and + #binwrite. It may take a long time to make them stable, so 1.9.2 + should not include them. We need refactoring to implement them + again. + + * test/ruby/test_io.rb: delete tests for them. + Sat Mar 6 10:03:35 2010 Yusuke Endoh <mame@t...> * io.c (rb_io_s_binwrite): use mode "r+b" instead of "ab" to handle Index: io.c =================================================================== --- io.c (revision 26826) +++ io.c (revision 26827) @@ -7677,7 +7677,7 @@ }; static void -open_key_args_with_opt(int argc, VALUE *argv, struct foreach_arg *arg, int mandatory_argc, int default_mode, int default_perm) +open_key_args(int argc, VALUE *argv, struct foreach_arg *arg) { VALUE opt, v; @@ -7685,9 +7685,9 @@ arg->io = 0; arg->argc = argc - 1; arg->argv = argv + 1; - if (argc == mandatory_argc) { + if (argc == 1) { no_key: - arg->io = rb_io_open(argv[0], INT2NUM(default_mode), INT2FIX(default_perm), Qnil); + arg->io = rb_io_open(argv[0], INT2NUM(O_RDONLY), INT2FIX(0666), Qnil); return; } opt = pop_last_hash(&arg->argc, arg->argv); @@ -7712,23 +7712,9 @@ rb_ary_clear(args); /* prevent from GC */ return; } - if (default_mode != O_RDONLY && NIL_P(rb_hash_aref(opt, sym_mode))) { - opt = rb_hash_dup(opt); - rb_hash_aset(opt, sym_mode, INT2NUM(default_mode)); - } - if (default_perm != 0666 && NIL_P(rb_hash_aref(opt, sym_perm))) { - opt = rb_hash_dup(opt); - rb_hash_aset(opt, sym_perm, INT2FIX(default_perm)); - } arg->io = rb_io_open(argv[0], Qnil, Qnil, opt); } -static void -open_key_args(int argc, VALUE *argv, struct foreach_arg *arg) -{ - open_key_args_with_opt(argc, argv, arg, 1, O_RDONLY, 0666); -} - static VALUE io_s_foreach(struct foreach_arg *arg) { @@ -7816,16 +7802,6 @@ return io_read(arg->argc, arg->argv, arg->io); } -struct write_arg { - VALUE io, str; -}; - -static VALUE -io_s_write(struct write_arg *arg) -{ - return io_write(arg->io, arg->str, 0); -} - struct seek_arg { VALUE io; VALUE offset; @@ -7833,7 +7809,7 @@ }; static VALUE -seek_before_access(struct seek_arg *arg) +seek_before_read(struct seek_arg *arg) { rb_io_binmode(arg->io); return rb_io_seek(arg->io, arg->offset, arg->mode); @@ -7844,7 +7820,7 @@ * IO.read(name, [length [, offset]] ) => string * IO.read(name, [length [, offset]], open_args) => string * - * Opens the file, optionally seeks to the given <i>offset</i>, then returns + * Opens the file, optionally seeks to the given offset, then returns * <i>length</i> bytes (defaulting to the rest of the file). * <code>read</code> ensures the file is closed before returning. * @@ -7886,7 +7862,7 @@ sarg.io = arg.io; sarg.offset = offset; sarg.mode = SEEK_SET; - rb_protect((VALUE (*)(VALUE))seek_before_access, (VALUE)&sarg, &state); + rb_protect((VALUE (*)(VALUE))seek_before_read, (VALUE)&sarg, &state); if (state) { rb_io_close(arg.io); rb_jump_tag(state); @@ -7900,9 +7876,9 @@ * call-seq: * IO.binread(name, [length [, offset]] ) => string * - * Opens the file, optionally seeks to the given <i>offset</i>, then returns + * Opens the file, optionally seeks to the given offset, then returns * <i>length</i> bytes (defaulting to the rest of the file). - * <code>binread</code> ensures the file is closed before returning. + * <code>read</code> ensures the file is closed before returning. * The open mode would be "rb:ASCII-8BIT". * * IO.binread("testfile") #=> "This is line one\nThis is line two\nThis is line three\nAnd so on...\n" @@ -7928,117 +7904,6 @@ return rb_ensure(io_s_read, (VALUE)&arg, rb_io_close, arg.io); } -/* - * call-seq: - * IO.write(name, string, [offset] ) => fixnum - * IO.write(name, string, [offset], open_args ) => fixnum - * - * Opens the file, optionally seeks to the given <i>offset</i>, writes - * <i>string</i>, then returns the length written. - * <code>write</code> ensures the file is closed before returning. - * If <i>offset</i> is not given, the file is truncated. Otherwise, - * it is not truncated. - * - * If the last argument is a hash, it specifies option for internal - * open(). The key would be the following. open_args: is exclusive - * to others. - * - * encoding: string or encoding - * - * specifies encoding of the read string. encoding will be ignored - * if length is specified. - * - * mode: string - * - * specifies mode argument for open(). it should start with "w" or "a" or "r+" - * otherwise it would cause error. - * - * perm: fixnum - * - * specifies perm argument for open(). - * - * open_args: array of strings - * - * specifies arguments for open() as an array. - * - * IO.write("testfile", "0123456789") #=> "0123456789" - * IO.write("testfile", "0123456789", 20) #=> "This is line one\nThi0123456789two\nThis is line three\nAnd so on...\n" - */ - -static VALUE -rb_io_s_write(int argc, VALUE *argv, VALUE io) -{ - VALUE offset; - struct foreach_arg arg; - struct write_arg warg; - int mode = O_WRONLY | O_CREAT, mandatory_argc; - - rb_scan_args(argc, argv, "22", NULL, &warg.str, &offset, NULL); - if (!NIL_P(offset) && FIXNUM_P(offset)) { - mandatory_argc = 3; - } - else { - mode |= O_TRUNC; - mandatory_argc = 2; - } - open_key_args_with_opt(argc, argv, &arg, mandatory_argc, mode, 0666); - if (NIL_P(arg.io)) return Qnil; - if (!NIL_P(offset) && FIXNUM_P(offset)) { - struct seek_arg sarg; - int state = 0; - sarg.io = arg.io; - sarg.offset = offset; - sarg.mode = SEEK_SET; - rb_protect((VALUE (*)(VALUE))seek_before_access, (VALUE)&sarg, &state); - if (state) { - rb_io_close(arg.io); - rb_jump_tag(state); - } - if (arg.argc == 2) arg.argc = 1; - } - warg.io = arg.io; - return rb_ensure(io_s_write, (VALUE)&warg, rb_io_close, arg.io); -} - -/* - * call-seq: - * IO.binwrite(name, string, [offset] ) => fixnum - * - * Opens the file, optionally seeks to the given <i>offset</i>, write - * <i>string</i> then returns the length written. - * <code>binwrite</code> ensures the file is closed before returning. - * The open mode would be "wb:ASCII-8BIT". - * If <i>offset</i> is not given, the file is truncated. Otherwise, - * it is not truncated. - * - * IO.binwrite("testfile", "0123456789") #=> "0123456789" - * IO.binwrite("testfile", "0123456789", 20) #=> "This is line one\nThi0123456789two\nThis is line three\nAnd so on...\n" - */ - -static VALUE -rb_io_s_binwrite(int argc, VALUE *argv, VALUE io) -{ - VALUE offset; - const char *mode; - struct write_arg warg; - - rb_scan_args(argc, argv, "21", NULL, &warg.str, &offset); - if (!NIL_P(offset)) { - NUM2OFFT(offset); - mode = "r+b:ASCII-8BIT"; - } - else { - mode = "wb:ASCII-8BIT"; - } - FilePathValue(argv[0]); - warg.io = rb_io_open(argv[0], rb_str_new_cstr(mode), Qnil, Qnil); - if (NIL_P(warg.io)) return Qnil; - if (!NIL_P(offset)) { - rb_io_seek(warg.io, offset, SEEK_SET); - } - return rb_ensure(io_s_write, (VALUE)&warg, rb_io_close, warg.io); -} - struct copy_stream_struct { VALUE src; VALUE dst; @@ -9842,8 +9707,6 @@ rb_define_singleton_method(rb_cIO, "readlines", rb_io_s_readlines, -1); rb_define_singleton_method(rb_cIO, "read", rb_io_s_read, -1); rb_define_singleton_method(rb_cIO, "binread", rb_io_s_binread, -1); - rb_define_singleton_method(rb_cIO, "write", rb_io_s_write, -1); - rb_define_singleton_method(rb_cIO, "binwrite", rb_io_s_binwrite, -1); rb_define_singleton_method(rb_cIO, "select", rb_f_select, -1); rb_define_singleton_method(rb_cIO, "pipe", rb_io_s_pipe, -1); rb_define_singleton_method(rb_cIO, "try_convert", rb_io_s_try_convert, 1); Index: test/ruby/test_io.rb =================================================================== --- test/ruby/test_io.rb (revision 26826) +++ test/ruby/test_io.rb (revision 26827) @@ -1512,34 +1512,4 @@ t.close assert_raise(IOError) {t.binmode} end - - def test_s_write - t = Tempfile.new("foo") - path = t.path - t.close(false) - File.write(path, "foo\nbar\nbaz") - assert_equal("foo\nbar\nbaz", File.read(path)) - File.write(path, "FOO", 0) - assert_equal("FOO\nbar\nbaz", File.read(path)) - File.write(path, "BAR") - assert_equal("BAR", File.read(path)) - File.write(path, "\u{3042}", mode: "w", encoding: "EUC-JP") - assert_equal("\u{3042}".encode("EUC-JP"), File.read(path, encoding: "EUC-JP")) - t.unlink - end - - def test_s_binwrite - t = Tempfile.new("foo") - path = t.path - t.close(false) - File.binwrite(path, "foo\nbar\nbaz") - assert_equal("foo\nbar\nbaz", File.read(path)) - File.binwrite(path, "FOO", 0) - assert_equal("FOO\nbar\nbaz", File.read(path)) - File.binwrite(path, "BAR") - assert_equal("BAR", File.read(path)) - File.binwrite(path, "\u{3042}") - assert_equal("\u{3042}", File.read(path)) - t.unlink - end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/