fix issue 120040
This commit is contained in:
parent
69db514ed9
commit
3269513eb0
@ -1068,6 +1068,27 @@ pub fn readdir(p: &Path) -> io::Result<ReadDir> {
|
||||
unsafe {
|
||||
let mut wfd = mem::zeroed();
|
||||
let find_handle = c::FindFirstFileW(path.as_ptr(), &mut wfd);
|
||||
|
||||
// The status `ERROR_FILE_NOT_FOUND` is returned by the `FindFirstFileW` function
|
||||
// if no matching files can be found, but not necessarily that the path to find the
|
||||
// files in does not exist.
|
||||
//
|
||||
// Hence, a check for whether the path to search in exists is added when the last
|
||||
// os error returned by Windows is `ERROR_FILE_NOT_FOUND` to handle this scenario.
|
||||
// If that is the case, an empty `ReadDir` iterator is returned as it returns `None`
|
||||
// in the initial `.next()` invocation because `ERROR_NO_MORE_FILES` would have been
|
||||
// returned by the `FindNextFileW` function.
|
||||
//
|
||||
// See issue #120040: https://github.com/rust-lang/rust/issues/120040.
|
||||
let last_error = Error::last_os_error();
|
||||
if last_error.raw_os_error().unwrap() == c::ERROR_FILE_NOT_FOUND && p.exists() {
|
||||
return Ok(ReadDir {
|
||||
handle: FindNextFileHandle(file_handle),
|
||||
root: Arc::new(root),
|
||||
first: None,
|
||||
});
|
||||
}
|
||||
|
||||
if find_handle != c::INVALID_HANDLE_VALUE {
|
||||
Ok(ReadDir {
|
||||
handle: FindNextFileHandle(find_handle),
|
||||
|
Loading…
Reference in New Issue
Block a user