From 16cd13c05188bf52c5dfb056f02ebf4574bb1bc3 Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 16 Aug 2010 12:40:10 +0000 Subject: * ext/pathname/pathname.c (path_basename): Pathname#basename translated from pathname.rb. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ ext/pathname/lib/pathname.rb | 3 --- ext/pathname/pathname.c | 17 +++++++++++++++++ test/pathname/test_pathname.rb | 1 + 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1013eb4464..d193f1375d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Aug 16 21:39:33 2010 Tanaka Akira + + * ext/pathname/pathname.c (path_basename): Pathname#basename translated + from pathname.rb. + Mon Aug 16 20:26:13 2010 Narihiro Nakamura * gc.c (gc_profile_result): Index begins with 1. diff --git a/ext/pathname/lib/pathname.rb b/ext/pathname/lib/pathname.rb index baadec4196..44152b9b6c 100644 --- a/ext/pathname/lib/pathname.rb +++ b/ext/pathname/lib/pathname.rb @@ -512,9 +512,6 @@ end class Pathname # * File * - # See File.basename. Returns the last component of the path. - def basename(*args) self.class.new(File.basename(@path, *args)) end - # See File.dirname. Returns all but the last component of the path. def dirname() self.class.new(File.dirname(@path)) end diff --git a/ext/pathname/pathname.c b/ext/pathname/pathname.c index ca7377c85a..06a904e10e 100644 --- a/ext/pathname/pathname.c +++ b/ext/pathname/pathname.c @@ -423,6 +423,22 @@ path_utime(VALUE self, VALUE atime, VALUE mtime) return rb_funcall(rb_cFile, rb_intern("utime"), 3, atime, mtime, get_strpath(self)); } +/* + * See File.basename. Returns the last component of the path. + */ +static VALUE +path_basename(int argc, VALUE *argv, VALUE self) +{ + VALUE str = get_strpath(self); + VALUE fext; + int n; + if (rb_scan_args(argc, argv, "01", &fext) == 0) + str = rb_funcall(rb_cFile, rb_intern("basename"), 1, str); + else + str = rb_funcall(rb_cFile, rb_intern("basename"), 2, str, fext); + return rb_class_new_instance(1, &str, rb_obj_class(self)); +} + /* * == Pathname * @@ -642,4 +658,5 @@ Init_pathname() rb_define_method(rb_cPathname, "make_symlink", path_make_symlink, 1); rb_define_method(rb_cPathname, "truncate", path_truncate, 1); rb_define_method(rb_cPathname, "utime", path_utime, 2); + rb_define_method(rb_cPathname, "basename", path_basename, -1); } diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb index 25e0423033..125eb39509 100644 --- a/test/pathname/test_pathname.rb +++ b/test/pathname/test_pathname.rb @@ -915,6 +915,7 @@ class TestPathname < Test::Unit::TestCase def test_basename assert_equal(Pathname("basename"), Pathname("dirname/basename").basename) + assert_equal(Pathname("bar"), Pathname("foo/bar.x").basename(".x")) end def test_dirname -- cgit v1.2.3