[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]