From: "U.Nakamura" Date: 2005-11-21T14:14:14+09:00 Subject: [ruby-dev:27779] Re: File.dirname("///foo/bar/baz/qux") on cygwin こんにちは、なかむら(う)です。 In message "[ruby-dev:27778] Re: File.dirname("///foo/bar/baz/qux") on cygwin" on Nov.21,2005 13:47:11, wrote: | > File.basename("/") が "/" になるということから類推すると "/" | > になるべきなのかなあ。 パッチ書いちゃったのですが(メール末尾)、 | a:に合わせてはどうでしょうか。 これはつまり、 p File.split("//") #=> ["//", ""] p File.split("//aaa") #=> ["//aaa", ""] p File.split("//aaa/bbb") #=> ["//aaa/bbb", ""] p File.split("//aaa/bbb/ccc") #=> ["//aaa/bbb", "ccc"] ということですよね。 私のパッチの方は "" が "/" になります。 さて、理屈としてはどっちがいいのですかね。 basenameが空になるのは、引数が相対パスでかつディレクトリ指定 が含まれていない場合のみだと思うので、"/" になる方がいいんじゃ ないかと思ったのですが、はてさて。 Index: file.c =================================================================== RCS file: /home/cvs/ruby/file.c,v retrieving revision 1.225 diff -u -1 -p -r1.225 file.c --- file.c 18 Nov 2005 09:09:23 -0000 1.225 +++ file.c 21 Nov 2005 05:07:53 -0000 @@ -2579,5 +2579,12 @@ rb_file_s_basename(int argc, VALUE *argv return fname; - if (!*(name = skiproot(name))) { + name = skipprefix(name); + while (isdirsep(*name)) + name++; + if (!*name) { p = name - 1; f = 1; +#ifdef DOSISH_UNC + if (!isdirsep(*p)) /* when *p is not dirsep, incomplete UNC. */ + p = RSTRING(fname)->ptr + 1; +#endif #ifdef DOSISH_DRIVE_LETTER それでは。 -- U.Nakamura