From: nobuyoshi nakada Date: 2005-11-21T13:47:11+09:00 Subject: [ruby-dev:27778] Re: File.dirname("///foo/bar/baz/qux") on cygwin なかだです。 At Mon, 21 Nov 2005 12:54:14 +0900, U.Nakamura wrote in [ruby-dev:27777]: > File.basename("/") が "/" になるということから類推すると "/" > になるべきなのかなあ。 a:に合わせてはどうでしょうか。 Index: file.c =================================================================== RCS file: /cvs/ruby/src/ruby/file.c,v retrieving revision 1.225 diff -U2 -p -u -r1.225 file.c --- file.c 18 Nov 2005 09:09:23 -0000 1.225 +++ file.c 21 Nov 2005 04:42:07 -0000 @@ -2215,5 +2215,9 @@ rb_path_next(const char *s) } +#if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER) #define skipprefix rb_path_skip_prefix +#else +#define skipprefix(path) (path) +#endif char * rb_path_skip_prefix(const char *path) @@ -2570,4 +2574,7 @@ rb_file_s_basename(int argc, VALUE *argv VALUE fname, fext, basename; char *name, *p; +#ifdef DOSISH + char *root; +#endif int f; @@ -2578,9 +2585,14 @@ rb_file_s_basename(int argc, VALUE *argv if (RSTRING(fname)->len == 0 || !*(name = RSTRING(fname)->ptr)) return fname; - if (!*(name = skiproot(name))) { + name = skipprefix(name); + while (isdirsep(*name)) name++; +#ifdef DOSISH + root = name; +#endif + if (!*name) { p = name - 1; f = 1; -#ifdef DOSISH_DRIVE_LETTER - if (*p == ':') { +#ifdef DOSISH + if (name == root) { p++; f = 0; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦