summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-11-18 07:51:19 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-11-18 07:51:19 +0000
commit7b692e55cde4634209942cca197acf392ca51558 (patch)
treebf31b7e71dcbb1a4690b7b240c7f6a6b925765e9 /file.c
parent4378916e95c0dc7ff8452764dfdc690166fbd27a (diff)
* 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/trunk@9559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/file.c b/file.c
index bdd12d0946..669929b606 100644
--- a/file.c
+++ b/file.c
@@ -2638,9 +2638,16 @@ rb_file_s_dirname(VALUE klass, VALUE 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);