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

ruby-changes:11060

From: nobu <ko1@a...>
Date: Fri, 27 Feb 2009 15:49:58 +0900 (JST)
Subject: [ruby-changes:11060] Ruby:r22655 (trunk, ruby_1_8): * file.c (file_load_ok): checks if regular file.

nobu	2009-02-27 15:49:43 +0900 (Fri, 27 Feb 2009)

  New Revision: 22655

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

  Log:
    * file.c (file_load_ok): checks if regular file.  [ruby-dev:38097]

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/file.c
    branches/ruby_1_8/version.h
    trunk/ChangeLog
    trunk/bootstraptest/test_load.rb
    trunk/file.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22654)
+++ ChangeLog	(revision 22655)
@@ -1,3 +1,7 @@
+Fri Feb 27 15:49:41 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (file_load_ok): checks if regular file.  [ruby-dev:38097]
+
 Fri Feb 27 14:39:40 2009  NAKAMURA Usaku  <usa@r...>
 
 	* numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert
Index: bootstraptest/test_load.rb
===================================================================
--- bootstraptest/test_load.rb	(revision 22654)
+++ bootstraptest/test_load.rb	(revision 22655)
@@ -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: file.c
===================================================================
--- file.c	(revision 22654)
+++ file.c	(revision 22655)
@@ -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
@@ -2035,7 +2027,6 @@
 	rb_sys_fail(path);
 }
 
-
 /*
  *  call-seq:
  *     file.lchown(owner_int, group_int, file_name,..) => integer
@@ -2172,7 +2163,6 @@
     return LONG2FIX(n);
 }
 
-
 NORETURN(static void sys_fail2(VALUE,VALUE));
 static void
 sys_fail2(VALUE s1, VALUE s2)
@@ -3779,7 +3769,6 @@
 }
 
 
-
 /*
  *  Document-class: File::Stat
  *
@@ -4082,8 +4071,6 @@
     return Qtrue;
 }
 
-
-
 /*
  *  call-seq:
  *     stat.readable_real? -> true or false
@@ -4280,7 +4267,6 @@
  *  the process.
  */
 
-
 static VALUE
 rb_stat_X(VALUE obj)
 {
@@ -4341,7 +4327,6 @@
     return Qfalse;
 }
 
-
 /*
  *  call-seq:
  *     state.size    => integer
@@ -4536,7 +4521,13 @@
 static int
 file_load_ok(const char *path)
 {
-    return eaccess(path, R_OK) == 0;
+    struct stat st;
+    int ret, fd = open(path, O_RDONLY);
+    if (fd == -1) return 0;
+    ret = fstat(fd, &st);
+    (void)close(fd);
+    if (ret) return 0;
+    return S_ISREG(st.st_mode);
 }
 
 static int
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 22654)
+++ ruby_1_8/ChangeLog	(revision 22655)
@@ -1,3 +1,7 @@
+Fri Feb 27 15:49:41 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (file_load_ok): checks if regular file.  [ruby-dev:38097]
+
 Thu Feb 26 14:31:27 2009  Shugo Maeda  <shugo@r...>
 
 	* ext/openssl/ossl_ocsp.c (ossl_ocspbres_verify): OCSP_basic_verify
Index: ruby_1_8/version.h
===================================================================
--- ruby_1_8/version.h	(revision 22654)
+++ ruby_1_8/version.h	(revision 22655)
@@ -1,7 +1,7 @@
 #define RUBY_VERSION "1.8.7"
-#define RUBY_RELEASE_DATE "2009-02-26"
+#define RUBY_RELEASE_DATE "2009-02-27"
 #define RUBY_VERSION_CODE 187
-#define RUBY_RELEASE_CODE 20090226
+#define RUBY_RELEASE_CODE 20090227
 #define RUBY_PATCHLEVEL 5000
 
 #define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
 #define RUBY_VERSION_TEENY 7
 #define RUBY_RELEASE_YEAR 2009
 #define RUBY_RELEASE_MONTH 2
-#define RUBY_RELEASE_DAY 26
+#define RUBY_RELEASE_DAY 27
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: ruby_1_8/file.c
===================================================================
--- ruby_1_8/file.c	(revision 22654)
+++ ruby_1_8/file.c	(revision 22655)
@@ -290,7 +290,6 @@
 #endif
 }
 
-
 /*
  *  call-seq:
  *     stat.ino   => fixnum
@@ -351,7 +350,6 @@
     return UINT2NUM(get_stat(self)->st_nlink);
 }
 
-
 /*
  *  call-seq:
  *     stat.uid    => fixnum
@@ -386,7 +384,6 @@
     return UINT2NUM(get_stat(self)->st_gid);
 }
 
-
 /*
  *  call-seq:
  *     stat.rdev   =>  fixnum or nil
@@ -516,7 +513,6 @@
 #endif
 }
 
-
 /*
  *  call-seq:
  *     stat.atime   => time
@@ -782,7 +778,6 @@
 #endif
 }
 
-
 /*
  *  call-seq:
  *     file.lstat   =>  stat
@@ -912,7 +907,6 @@
  *     
  */
 
-
 /*
  * call-seq:
  *   File.directory?(file_name)   =>  true or false
@@ -1085,7 +1079,6 @@
     return Qfalse;
 }
 
-
 /*
  * call-seq:
  *    File.exist?(file_name)    =>  true or false
@@ -1138,7 +1131,6 @@
     return Qtrue;
 }
 
-
 /*
  * call-seq:
  *    File.writable?(file_name)   => true or false
@@ -1916,7 +1908,6 @@
 	rb_sys_fail(path);
 }
 
-
 /*
  *  call-seq:
  *     file.lchown(owner_int, group_int, file_name,..) => integer
@@ -3624,7 +3615,6 @@
 }
 
 
-
 /*
  *  Document-class: File::Stat
  *
@@ -3942,8 +3932,6 @@
     return Qtrue;
 }
 
-
-
 /*
  *  call-seq:
  *     stat.readable_real? -> true or false
@@ -4092,7 +4080,6 @@
  *  the process.
  */
 
-
 static VALUE
 rb_stat_X(obj)
     VALUE obj;
@@ -4156,7 +4143,6 @@
     return Qfalse;
 }
 
-
 /*
  *  call-seq:
  *     state.size    => integer
@@ -4373,13 +4359,13 @@
 file_load_ok(file)
     const char *file;
 {
-    FILE *f;
-
-    if (!file) return 0;
-    f = fopen(file, "r");
-    if (f == NULL) return 0;
-    fclose(f);
-    return 1;
+    struct stat st;
+    int ret, fd = open(file, O_RDONLY);
+    if (fd == -1) return 0;
+    ret = fstat(fd, &st);
+    (void)close(fd);
+    if (ret) return 0;
+    return S_ISREG(st.st_mode);
 }
 
 static int

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

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