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

ruby-changes:22326

From: nobu <ko1@a...>
Date: Wed, 25 Jan 2012 15:23:58 +0900 (JST)
Subject: [ruby-changes:22326] nobu:r34375 (trunk): * file.c (rb_file_s_basename): ignore non-ascii extension in

nobu	2012-01-25 13:27:45 +0900 (Wed, 25 Jan 2012)

  New Revision: 34375

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

  Log:
    * file.c (rb_file_s_basename): ignore non-ascii extension in
      different encoding, which cannot match.

  Modified files:
    trunk/ChangeLog
    trunk/file.c
    trunk/test/ruby/test_file_exhaustive.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34374)
+++ ChangeLog	(revision 34375)
@@ -1,5 +1,8 @@
-Wed Jan 25 11:40:26 2012  Nobuyoshi Nakada  <nobu@r...>
+Wed Jan 25 13:27:42 2012  Nobuyoshi Nakada  <nobu@r...>
 
+	* file.c (rb_file_s_basename): ignore non-ascii extension in
+	  different encoding, which cannot match.
+
 	* file.c (rmext): no extension to strip if empty string.
 
 	* file.c (rb_enc_path_next, rb_enc_path_skip_prefix)
Index: test/ruby/test_file_exhaustive.rb
===================================================================
--- test/ruby/test_file_exhaustive.rb	(revision 34374)
+++ test/ruby/test_file_exhaustive.rb	(revision 34375)
@@ -478,6 +478,9 @@
 
     s = "foo\x93_a".force_encoding("cp932")
     assert_equal(s, File.basename(s, "_a"))
+
+    s = "\u4032.\u3024"
+    assert_equal(s, File.basename(s, ".\x95\\".force_encoding("cp932")))
   end
 
   def test_dirname
Index: file.c
===================================================================
--- file.c	(revision 34374)
+++ file.c	(revision 34375)
@@ -3658,8 +3658,10 @@
 	}
     }
     FilePathStringValue(fname);
-    if (!NIL_P(fext)) enc = rb_enc_check(fname, fext);
-    else enc = rb_enc_get(fname);
+    if (NIL_P(fext) || !(enc = rb_enc_compatible(fname, fext))) {
+	enc = rb_enc_get(fname);
+	fext = Qnil;
+    }
     if ((n = RSTRING_LEN(fname)) == 0 || !*(name = RSTRING_PTR(fname)))
 	return rb_str_new_shared(fname);
 
@@ -3669,12 +3671,7 @@
 	    f = n;
 	}
 	else {
-	    rb_encoding *fenc = rb_enc_get(fext);
 	    const char *fp;
-	    if (enc != fenc &&
-		rb_enc_str_coderange(fext) != ENC_CODERANGE_7BIT) {
-		fext = rb_str_conv_enc(fext, fenc, enc);
-	    }
 	    fp = StringValueCStr(fext);
 	    if (!(f = rmext(p, f, n, fp, RSTRING_LEN(fext), enc))) {
 		f = n;

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

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