[前][次][番号順一覧][スレッド一覧]

ruby-changes:4946

From: ko1@a...
Date: Sat, 17 May 2008 11:29:34 +0900 (JST)
Subject: [ruby-changes:4946] nobu - Ruby:r16439 (trunk, ruby_1_8): * file.c (rb_file_s_extname): first dot is not an extension name.

nobu	2008-05-17 11:29:13 +0900 (Sat, 17 May 2008)

  New Revision: 16439

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/file.c
    trunk/ChangeLog
    trunk/file.c
    trunk/test/ruby/test_file_exhaustive.rb

  Log:
    * file.c (rb_file_s_extname): first dot is not an extension name.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_file_exhaustive.rb?r1=16439&r2=16438&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?r1=16439&r2=16438&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16439&r2=16438&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16439&r2=16438&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/file.c?r1=16439&r2=16438&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16438)
+++ ChangeLog	(revision 16439)
@@ -1,3 +1,7 @@
+Sat May 17 11:29:11 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (rb_file_s_extname): first dot is not an extension name.
+
 Sat May 17 03:21:29 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* array.c (rb_ary_sort_bang): stop memory leak.  [ruby-dev:34726]
Index: test/ruby/test_file_exhaustive.rb
===================================================================
--- test/ruby/test_file_exhaustive.rb	(revision 16438)
+++ test/ruby/test_file_exhaustive.rb	(revision 16439)
@@ -411,6 +411,17 @@
   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 "))
Index: file.c
===================================================================
--- file.c	(revision 16438)
+++ file.c	(revision 16439)
@@ -3104,7 +3104,7 @@
     if (!p)
 	p = name;
     else
-	p++;
+	name = ++p;
 
     e = 0;
     while (*p) {
@@ -3134,7 +3134,7 @@
 	    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);
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 16438)
+++ ruby_1_8/ChangeLog	(revision 16439)
@@ -1,3 +1,7 @@
+Sat May 17 11:29:11 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (rb_file_s_extname): first dot is not an extension name.
+
 Sat May 17 10:18:44 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* re.c (rb_reg_search): need to free allocated buffer in re_register.
Index: ruby_1_8/file.c
===================================================================
--- ruby_1_8/file.c	(revision 16438)
+++ ruby_1_8/file.c	(revision 16439)
@@ -3023,7 +3023,7 @@
     if (!p)
 	p = name;
     else
-	p++;
+	name = ++p;
 
     e = 0;
     while (*p) {
@@ -3053,7 +3053,7 @@
 	    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! */
     OBJ_INFECT(extname, fname);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]