summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-25 04:27:45 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-25 04:27:45 +0000
commit97f0b0f55818420b4c7a7002c92c08ad78a7e579 (patch)
tree178525f500530fedf70e4c2085c405ac5c586a45 /file.c
parentb094ab09486e4ccd8c656e214e574524919c76fb (diff)
* file.c (rb_file_s_basename): ignore non-ascii extension in
different encoding, which cannot match. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/file.c b/file.c
index b9309243dd..e5785bd249 100644
--- a/file.c
+++ b/file.c
@@ -3658,8 +3658,10 @@ rb_file_s_basename(int argc, VALUE *argv)
}
}
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 @@ rb_file_s_basename(int argc, VALUE *argv)
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;