From: nobuyoshi nakada Date: 2005-11-21T15:06:55+09:00 Subject: [ruby-dev:27781] Re: File.dirname("///foo/bar/baz/qux") on cygwin なかだです。 At Mon, 21 Nov 2005 14:14:14 +0900, U.Nakamura wrote in [ruby-dev:27779]: > 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が空になるのは、引数が相対パスでかつディレクトリ指定 > が含まれていない場合のみだと思うので、"/" になる方がいいんじゃ > ないかと思ったのですが、はてさて。 ドライブレターのほうは、カレントディレクトリが複数というかなり 特殊な事情のためなので、たしかに別のほうがいいかも。 > +#ifdef DOSISH_UNC > + if (!isdirsep(*p)) /* when *p is not dirsep, incomplete UNC. */ > + p = RSTRING(fname)->ptr + 1; > +#endif ちょっと気になるのは、例によってマルチバイト関係ですが…。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦