From 147dcb2236416f0d40497caf2cc5eba754bbbefb Mon Sep 17 00:00:00 2001 From: usa Date: Fri, 18 Nov 2005 08:27:52 +0000 Subject: * file.c (file_s_dirname): added checks for some patterns with drive letter. fixed: [ruby-dev:27738] * test/ruby/test_path.rb (test_dirname): added tests for above patterns. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9561 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- file.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'file.c') diff --git a/file.c b/file.c index 8db72a089a..36c5ed876e 100644 --- a/file.c +++ b/file.c @@ -2689,7 +2689,7 @@ rb_file_s_dirname(klass, fname) root = skiproot(name); #ifdef DOSISH_UNC if (root > name + 1 && isdirsep(*name)) - root = skipprefix(name = root - 2); + name = root - 2; #else if (root > name + 1) name = root - 1; @@ -2700,9 +2700,16 @@ rb_file_s_dirname(klass, fname) } if (p == name) return rb_str_new2("."); +#ifdef DOSISH_DRIVE_LETTER + if (has_drive_letter(name) && isdirsep(*(name + 2))) { + dirname = rb_str_new(name, 3); + rb_str_cat(dirname, skiproot(name + 2), p - skiproot(name + 2)); + } + else +#endif dirname = rb_str_new(name, p - name); #ifdef DOSISH_DRIVE_LETTER - if (root == name + 2 && name[1] == ':') + if (has_drive_letter(name) && root == name + 2 && p - name == 2) rb_str_cat(dirname, ".", 1); #endif OBJ_INFECT(dirname, fname); -- cgit v1.2.3