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/