diff --git a/ChangeLog b/ChangeLog index ec6c36f41c..23b954a211 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Thu Mar 25 23:17:16 2010 Yusuke Endoh + + * file.c (rb_get_path_check): prefer #to_path over #to_str. a patch + originally written by me, and modified by Nobuyoshi Nakada. + [ruby-core:24257] + Thu Mar 25 18:10:08 2010 Kazuhiro NISHIYAMA * NEWS: Array#{uniq,uniq!} can take a block. see [ruby-dev:37998] diff --git a/file.c b/file.c index 5a0b16eabe..557085e1aa 100644 --- a/file.c +++ b/file.c @@ -129,18 +129,14 @@ rb_get_path_check(VALUE obj, int level) if (insecure_obj_p(obj, level)) { rb_insecure_operation(); } - 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); - } - else { + tmp = rb_check_funcall(obj, to_path, 0, 0); + if (tmp == Qundef) { tmp = obj; } StringValue(tmp); - exit: + tmp = file_path_convert(tmp); StringValueCStr(tmp); if (obj != tmp && insecure_obj_p(tmp, level)) {