1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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
This commit is contained in:
nobu 2008-05-17 02:29:13 +00:00
parent c39e8c6e85
commit 34c96140f3
3 changed files with 17 additions and 2 deletions

View file

@ -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> 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] * array.c (rb_ary_sort_bang): stop memory leak. [ruby-dev:34726]

4
file.c
View file

@ -3104,7 +3104,7 @@ rb_file_s_extname(VALUE klass, VALUE fname)
if (!p) if (!p)
p = name; p = name;
else else
p++; name = ++p;
e = 0; e = 0;
while (*p) { while (*p) {
@ -3134,7 +3134,7 @@ rb_file_s_extname(VALUE klass, VALUE fname)
break; break;
p = CharNext(p); 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); return rb_str_new(0, 0);
extname = rb_str_new(e, p - e); /* keep the dot, too! */ extname = rb_str_new(e, p - e); /* keep the dot, too! */
rb_enc_copy(extname, fname); rb_enc_copy(extname, fname);

View file

@ -411,6 +411,17 @@ class TestFileExhaustive < Test::Unit::TestCase
def test_extname def test_extname
assert(".test", File.extname(@file)) 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("/.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("")) assert_equal("", File.extname(""))
if /cygwin|mingw|mswin|bccwin/ =~ RUBY_PLATFORM if /cygwin|mingw|mswin|bccwin/ =~ RUBY_PLATFORM
assert_equal("", File.extname("foo ")) assert_equal("", File.extname("foo "))