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

ruby-changes:14025

From: naruse <ko1@a...>
Date: Wed, 18 Nov 2009 11:41:50 +0900 (JST)
Subject: [ruby-changes:14025] Ruby:r25835 (trunk): * io.c (rb_scan_open_args): move path encoding conversion

naruse	2009-11-18 11:41:25 +0900 (Wed, 18 Nov 2009)

  New Revision: 25835

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

  Log:
    * io.c (rb_scan_open_args): move path encoding conversion
      for filesystem encoding of Mac OS X.
    
    * file.c (file_path_convert): added for convert encoding
      of file path.
    
    * file.c (rb_get_path_check): add file_path_convert.

  Modified files:
    trunk/ChangeLog
    trunk/file.c
    trunk/io.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25834)
+++ ChangeLog	(revision 25835)
@@ -1,3 +1,13 @@
+Wed Nov 18 11:37:05 2009  NARUSE, Yui  <naruse@r...>
+
+	* io.c (rb_scan_open_args): move path encoding conversion
+	  for filesystem encoding of Mac OS X.
+
+	* file.c (file_path_convert): added for convert encoding
+	  of file path.
+
+	* file.c (rb_get_path_check): add file_path_convert.
+
 Wed Nov 18 10:17:09 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* string.c (str_utf8_nth): no count_utf8_lead_bytes_with_word
Index: io.c
===================================================================
--- io.c	(revision 25834)
+++ io.c	(revision 25835)
@@ -5323,27 +5323,6 @@
     opt = pop_last_hash(&argc, argv);
     rb_scan_args(argc, argv, "12", &fname, &vmode, &vperm);
     FilePathValue(fname);
-#ifdef __APPLE__
-    {
-	static rb_encoding *fs_encoding;
-	static rb_encoding *utf8mac_encoding;
-	rb_encoding *fname_encoding = rb_enc_get(fname);
-	if (!fs_encoding)
-	    fs_encoding = rb_filesystem_encoding();
-	if (!utf8mac_encoding)
-	    utf8mac_encoding = rb_enc_find("UTF8-MAC");
-	if (rb_usascii_encoding() != fname_encoding
-	    && rb_ascii8bit_encoding() != fname_encoding
-	    && rb_utf8_encoding() != fname_encoding
-	    && utf8mac_encoding != fname_encoding
-	    && fs_encoding != fname_encoding) {
-	    static VALUE fs_enc;
-	    if (!fs_enc)
-		fs_enc = rb_enc_from_encoding(fs_encoding);
-	    fname = rb_str_encode(fname, fs_enc, 0, Qnil);
-	}
-    }
-#endif
 
     rb_io_extract_modeenc(&vmode, &vperm, opt, &oflags, &fmode, convconfig_p);
 
Index: file.c
===================================================================
--- file.c	(revision 25834)
+++ file.c	(revision 25835)
@@ -103,6 +103,33 @@
 
 #define insecure_obj_p(obj, level) (level >= 4 || (level > 0 && OBJ_TAINTED(obj)))
 
+VALUE
+file_path_convert(VALUE name)
+{
+    rb_encoding *fname_encoding = rb_enc_from_index(ENCODING_GET(name));
+    rb_encoding *fs_encoding = rb_filesystem_encoding();
+#ifdef __APPLE__
+    static rb_encoding *utf8mac_encoding;
+    if (!utf8mac_encoding)
+	utf8mac_encoding = rb_enc_find("UTF8-MAC");
+    if (rb_usascii_encoding() != fname_encoding
+	    && rb_ascii8bit_encoding() != fname_encoding
+	    && rb_utf8_encoding() != fname_encoding
+	    && utf8mac_encoding != fname_encoding
+	    && fs_encoding != fname_encoding) {
+	name = rb_str_conv_enc(name, fname_encoding, fs_encoding);
+    }
+#elif !defined(_WIN32)
+    if (rb_default_internal_encoding() != NULL
+	    && rb_usascii_encoding() != fname_encoding
+	    && rb_ascii8bit_encoding() != fname_encoding
+	    && fs_encoding != fname_encoding) {
+	name = rb_str_conv_enc(name, fname_encoding, fs_encoding);
+    }
+#endif
+    return name;
+}
+
 static VALUE
 rb_get_path_check(VALUE obj, int level)
 {
@@ -122,7 +149,9 @@
     else {
 	tmp = obj;
     }
+    StringValue(tmp);
   exit:
+    tmp = file_path_convert(tmp);
     StringValueCStr(tmp);
     if (obj != tmp && insecure_obj_p(tmp, level)) {
 	rb_insecure_operation();

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

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