From 79e0379a7573e998d52ea42242ea0cc96fa81738 Mon Sep 17 00:00:00 2001 From: usa Date: Wed, 4 Jan 2012 02:33:37 +0000 Subject: * 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 --- win32/win32.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'win32') 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); -- cgit v1.2.3