ruby-changes:18352
From: kosaki <ko1@a...>
Date: Sun, 26 Dec 2010 02:25:10 +0900 (JST)
Subject: [ruby-changes:18352] Ruby:r30375 (trunk): * io.c (advice_arg_check): Change argument check.
kosaki 2010-12-26 02:25:02 +0900 (Sun, 26 Dec 2010) New Revision: 30375 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30375 Log: * io.c (advice_arg_check): Change argument check. Now, an unsupported advice makes NotImplementedError. [ruby-dev:42887] [Ruby 1.9-Feature#4204] Modified files: trunk/ChangeLog trunk/io.c trunk/test/ruby/test_io.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 30374) +++ ChangeLog (revision 30375) @@ -1,3 +1,9 @@ +Sun Dec 26 02:31:58 2010 KOSAKI Motohiro <kosaki.motohiro@g...> + + * io.c (advice_arg_check): Change argument check. + Now, an unsupported advice makes NotImplementedError. + [ruby-dev:42887] [Ruby 1.9-Feature#4204] + Sun Dec 26 03:00:53 2010 KOSAKI Motohiro <kosaki.motohiro@g...> * ext/socket/extconf.rb: Fix build error which was introduced r30372. Index: io.c =================================================================== --- io.c (revision 30374) +++ io.c (revision 30375) @@ -7396,10 +7396,10 @@ } #endif -#ifdef HAVE_POSIX_FADVISE static VALUE sym_normal, sym_sequential, sym_random, sym_willneed, sym_dontneed, sym_noreuse; +#ifdef HAVE_POSIX_FADVISE struct io_advise_struct { int fd; off_t offset; @@ -7481,6 +7481,23 @@ #endif /* HAVE_POSIX_FADVISE */ +static void +advice_arg_check(VALUE advice) +{ + if (!SYMBOL_P(advice)) + rb_raise(rb_eTypeError, "advice must be a Symbol"); + + if (advice != sym_normal && + advice != sym_sequential && + advice != sym_random && + advice != sym_willneed && + advice != sym_dontneed && + advice != sym_noreuse) { + rb_raise(rb_eNotImpError, "Unsupported advice: :%s", + RSTRING_PTR(rb_id2str(SYM2ID(advice)))); + } +} + /* * call-seq: * ios.advise(advice, offset=0, len=0) -> nil @@ -7530,8 +7547,7 @@ rb_io_t *fptr; rb_scan_args(argc, argv, "12", &advice, &offset, &len); - if (!SYMBOL_P(advice)) - rb_raise(rb_eTypeError, "advice must be a Symbol"); + advice_arg_check(advice); io = GetWriteIO(io); GetOpenFile(io, fptr); @@ -10530,12 +10546,10 @@ sym_textmode = ID2SYM(rb_intern("textmode")); sym_binmode = ID2SYM(rb_intern("binmode")); sym_autoclose = ID2SYM(rb_intern("autoclose")); -#ifdef HAVE_POSIX_FADVISE sym_normal = ID2SYM(rb_intern("normal")); sym_sequential = ID2SYM(rb_intern("sequential")); sym_random = ID2SYM(rb_intern("random")); sym_willneed = ID2SYM(rb_intern("willneed")); sym_dontneed = ID2SYM(rb_intern("dontneed")); sym_noreuse = ID2SYM(rb_intern("noreuse")); -#endif } Index: test/ruby/test_io.rb =================================================================== --- test/ruby/test_io.rb (revision 30374) +++ test/ruby/test_io.rb (revision 30375) @@ -1763,10 +1763,15 @@ end end end + end + + def test_invalid_advise + feature4204 = '[ruby-dev:42887]' + t = make_tempfile %w{Normal rand glark will_need zzzzzzzzzzzz \u2609}.map(&:to_sym).each do |adv| [[0,0], [0, 20], [400, 2]].each do |offset, len| open(make_tempfile.path) do |t| - assert_equal(t.advise(adv, offset, len), nil) + assert_raise(NotImplementedError, feature4204) { t.advise(adv, offset, len) } end end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/