summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-17 02:29:13 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-17 02:29:13 +0000
commit34c96140f3e767e0a3bd9e82db55e46593d4f3b8 (patch)
tree4c5005a0fbf3fab757028651ed7c006678f95404
parentc39e8c6e854032645b0f2b799294d3e96d066697 (diff)
* file.c (rb_file_s_extname): first dot is not an extension name.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--file.c4
-rw-r--r--test/ruby/test_file_exhaustive.rb11
3 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 565a20b..b52fdfe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat May 17 11:29:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_extname): first dot is not an extension name.
+
Sat May 17 03:21:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* array.c (rb_ary_sort_bang): stop memory leak. [ruby-dev:34726]
diff --git a/file.c b/file.c
index f89248b..1f7b207 100644
--- a/file.c
+++ b/file.c
@@ -3104,7 +3104,7 @@ rb_file_s_extname(VALUE klass, VALUE fname)
if (!p)
p = name;
else
- p++;
+ name = ++p;
e = 0;
while (*p) {
@@ -3134,7 +3134,7 @@ rb_file_s_extname(VALUE klass, VALUE fname)
break;
p = CharNext(p);
}
- if (!e || e+1 == p) /* no dot, or the only dot is first or end? */
+ if (!e || e == name || e+1 == p) /* no dot, or the only dot is first or end? */
return rb_str_new(0, 0);
extname = rb_str_new(e, p - e); /* keep the dot, too! */
rb_enc_copy(extname, fname);
diff --git a/test/ruby/test_file_exhaustive.rb b/test/ruby/test_file_exhaustive.rb
index be28fc6..274f7bf 100644
--- a/test/ruby/test_file_exhaustive.rb
+++ b/test/ruby/test_file_exhaustive.rb
@@ -411,6 +411,17 @@ class TestFileExhaustive < Test::Unit::TestCase
def test_extname
assert(".test", File.extname(@file))
assert_equal("", File.extname("foo"))
+ assert_equal("", File.extname("/foo"))
+ assert_equal("", File.extname(".foo"))
+ assert_equal("", File.extname("/.foo"))
+ assert_equal("", File.extname("bar/.foo"))
+ assert_equal("", File.extname("/bar/.foo"))
+ assert_equal(".ext", File.extname("foo.ext"))
+ assert_equal(".ext", File.extname("/foo.ext"))
+ assert_equal(".ext", File.extname(".foo.ext"))
+ assert_equal(".ext", File.extname("/.foo.ext"))
+ assert_equal(".ext", File.extname("bar/.foo.ext"))
+ assert_equal(".ext", File.extname("/bar/.foo.ext"))
assert_equal("", File.extname(""))
if /cygwin|mingw|mswin|bccwin/ =~ RUBY_PLATFORM
assert_equal("", File.extname("foo "))