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

ruby-changes:11143

From: yugui <ko1@a...>
Date: Wed, 4 Mar 2009 18:19:42 +0900 (JST)
Subject: [ruby-changes:11143] Ruby:r22747 (ruby_1_9_1): merges r22655,r22658,r22660 and r22661 from trunk into ruby_1_9_1.

yugui	2009-03-04 18:19:31 +0900 (Wed, 04 Mar 2009)

  New Revision: 22747

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22747

  Log:
    merges r22655,r22658,r22660 and r22661 from trunk into ruby_1_9_1.
    --
    * file.c (file_load_ok): checks if regular file, except for the
      platform disallows to open directories, e.g. cygwin.
      [ruby-dev:38097], [Bug #1221]
    --
    * file.c (file_load_ok): cygwin allows to open directories.

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/bootstraptest/test_load.rb
    branches/ruby_1_9_1/file.c

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 22746)
+++ ruby_1_9_1/ChangeLog	(revision 22747)
@@ -1,3 +1,9 @@
+Fri Feb 27 17:45:25 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (file_load_ok): checks if regular file, except for the
+	  platform disallows to open directories, e.g. dosish.
+	  [ruby-dev:38097], [Bug #1221]
+
 Wed Feb 25 12:27:59 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* string.c (rb_str_force_encoding): should clear coderange at changing
Index: ruby_1_9_1/bootstraptest/test_load.rb
===================================================================
--- ruby_1_9_1/bootstraptest/test_load.rb	(revision 22746)
+++ ruby_1_9_1/bootstraptest/test_load.rb	(revision 22747)
@@ -13,3 +13,15 @@
   }.map {|t| t.value }
   vs[0] == M && vs[1] == M ? :ok : :ng
 }, '[ruby-dev:32048]'
+
+assert_equal 'ok', %q{
+  %w[a a/foo b].each {|d| Dir.mkdir(d)}
+  open("b/foo", "w") {|f| f.puts "$ok = :ok"}
+  $:.replace(%w[a b])
+  begin
+    load "foo"
+    $ok
+  rescue => e
+    e.message
+  end
+}, '[ruby-dev:38097]'
Index: ruby_1_9_1/file.c
===================================================================
--- ruby_1_9_1/file.c	(revision 22746)
+++ ruby_1_9_1/file.c	(revision 22747)
@@ -107,7 +107,6 @@
     tmp = rb_check_string_type(obj);
     if (!NIL_P(tmp)) goto exit;
 
-
     CONST_ID(to_path, "to_path");
     if (rb_respond_to(obj, to_path)) {
 	tmp = rb_funcall(obj, to_path, 0, 0);
@@ -294,7 +293,6 @@
 #endif
 }
 
-
 /*
  *  call-seq:
  *     stat.ino   => fixnum
@@ -352,7 +350,6 @@
     return UINT2NUM(get_stat(self)->st_nlink);
 }
 
-
 /*
  *  call-seq:
  *     stat.uid    => fixnum
@@ -385,7 +382,6 @@
     return GIDT2NUM(get_stat(self)->st_gid);
 }
 
-
 /*
  *  call-seq:
  *     stat.rdev   =>  fixnum or nil
@@ -839,7 +835,6 @@
 #endif
 }
 
-
 /*
  *  call-seq:
  *     file.lstat   =>  stat
@@ -965,7 +960,6 @@
  *     
  */
 
-
 /*
  *   File.directory?(file_name)   =>  true or false
  *   File.directory?(file_name)   =>  true or false
@@ -1014,7 +1008,6 @@
     return Qfalse;
 }
 
-
 /*
  * call-seq:
  *   File.pipe?(file_name)   =>  true or false
@@ -1158,7 +1151,6 @@
     return Qfalse;
 }
 
-
 /*
  * call-seq:
  *    File.exist?(file_name)    =>  true or false
@@ -2019,7 +2011,6 @@
 	rb_sys_fail(path);
 }
 
-
 /*
  *  call-seq:
  *     file.lchown(owner_int, group_int, file_name,..) => integer
@@ -2156,7 +2147,6 @@
     return LONG2FIX(n);
 }
 
-
 NORETURN(static void sys_fail2(VALUE,VALUE));
 static void
 sys_fail2(VALUE s1, VALUE s2)
@@ -3725,7 +3715,6 @@
 }
 
 
-
 /*
  *  Document-class: File::Stat
  *
@@ -4028,8 +4017,6 @@
     return Qtrue;
 }
 
-
-
 /*
  *  call-seq:
  *     stat.readable_real? -> true or false
@@ -4226,7 +4213,6 @@
  *  the process.
  */
 
-
 static VALUE
 rb_stat_X(VALUE obj)
 {
@@ -4287,7 +4273,6 @@
     return Qfalse;
 }
 
-
 /*
  *  call-seq:
  *     state.size    => integer
@@ -4482,7 +4467,19 @@
 static int
 file_load_ok(const char *path)
 {
-    return eaccess(path, R_OK) == 0;
+    int ret = 1;
+    int fd = open(path, O_RDONLY);
+    if (fd == -1) return 0;
+#if !defined DOSISH
+    {
+	struct stat st;
+	if (fstat(fd, &st) || !S_ISREG(st.st_mode)) {
+	    ret = 0;
+	}
+    }
+#endif
+    (void)close(fd);
+    return ret;
 }
 
 static int

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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