summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-04 02:33:37 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-04 02:33:37 +0000
commit79e0379a7573e998d52ea42242ea0cc96fa81738 (patch)
treefe5c02065ba78465a7b6811109954f6a1b289667
parentbd895ab17616bfae882990e302aa1b9036043129 (diff)
* win32/win32.c (check_valid_dir): special case for a root directory.
Reported by Masateru OKAMOTO at [Bug #5819]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34205 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--win32/win32.c15
2 files changed, 19 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e901bd231f..81182f2cda 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jan 4 11:32:07 2012 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (check_valid_dir): special case for a root directory.
+ Reported by Masateru OKAMOTO at [Bug #5819].
+
Wed Jan 4 00:19:54 2012 Kouhei Sutou <kou@cozmixng.org>
* lib/rexml/parsers/baseparser.rb: use private instead of _xxx
diff --git a/win32/win32.c b/win32/win32.c
index 79df655e43..62c3076d73 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -4475,7 +4475,20 @@ static int
check_valid_dir(const WCHAR *path)
{
WIN32_FIND_DATAW fd;
- HANDLE fh = open_dir_handle(path, &fd);
+ HANDLE fh;
+ WCHAR full[MAX_PATH];
+ WCHAR *dmy;
+
+ /* if the specified path is the root of a drive and the drive is empty, */
+ /* FindFirstFile() returns INVALID_HANDLE_VALUE. */
+ if (!GetFullPathNameW(path, sizeof(full) / sizeof(WCHAR), full, &dmy)) {
+ errno = map_errno(GetLastError());
+ return -1;
+ }
+ if (GetDriveTypeW(full) != DRIVE_NO_ROOT_DIR)
+ return 0;
+
+ fh = open_dir_handle(path, &fd);
if (fh == INVALID_HANDLE_VALUE)
return -1;
FindClose(fh);