Skip to content

Commit bfcd5ab

Browse files
committed
fix bugs
1 parent 15558e0 commit bfcd5ab

File tree

1 file changed

+43
-23
lines changed

1 file changed

+43
-23
lines changed

vm/src/stdlib/nt.rs

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -429,12 +429,7 @@ pub(crate) mod module {
429429
let mut volumes = vec![];
430430
let find;
431431
let mut buffer = [0u16; 257];
432-
find = unsafe {
433-
FileSystem::FindFirstVolumeW(
434-
buffer.as_mut_ptr(),
435-
buffer.len() as _,
436-
)
437-
};
432+
find = unsafe { FileSystem::FindFirstVolumeW(buffer.as_mut_ptr(), buffer.len() as _) };
438433
if find == windows_sys::Win32::Foundation::INVALID_HANDLE_VALUE {
439434
return Err(errno_err(vm));
440435
}
@@ -447,11 +442,7 @@ pub(crate) mod module {
447442
}
448443
volumes.push(s.to_string());
449444
let ret = unsafe {
450-
FileSystem::FindNextVolumeW(
451-
find,
452-
buffer.as_mut_ptr(),
453-
buffer.len() as _,
454-
)
445+
FileSystem::FindNextVolumeW(find, buffer.as_mut_ptr(), buffer.len() as _)
455446
};
456447
if ret == 0 {
457448
err = std::io::Error::last_os_error().raw_os_error().unwrap_or(0);
@@ -463,10 +454,7 @@ pub(crate) mod module {
463454
if err != 0 && err != windows_sys::Win32::Foundation::ERROR_NO_MORE_FILES as i32 {
464455
return Err(std::io::Error::from_raw_os_error(err).to_pyexception(vm));
465456
}
466-
let volumes: Vec<_> = volumes
467-
.into_iter()
468-
.map(|v| vm.new_pyobj(v))
469-
.collect();
457+
let volumes: Vec<_> = volumes.into_iter().map(|v| vm.new_pyobj(v)).collect();
470458
Ok(vm.ctx.new_list(volumes))
471459
}
472460

@@ -481,8 +469,16 @@ pub(crate) mod module {
481469
if path.is_dir() {
482470
return Ok(false);
483471
}
484-
let metadata = fs::metadata(path).map_err(|err| err.to_pyexception(vm))?;
485-
Ok(metadata.is_file())
472+
let metadata = fs::metadata(path);
473+
match metadata {
474+
Ok(meta) => Ok(meta.is_file()),
475+
Err(err) => {
476+
if err.kind() == io::ErrorKind::NotFound {
477+
return Ok(false);
478+
}
479+
Err(err.to_pyexception(vm))
480+
}
481+
}
486482
}
487483

488484
#[pyfunction]
@@ -494,8 +490,16 @@ pub(crate) mod module {
494490
if path.exists() {
495491
return Ok(false);
496492
}
497-
let metadata = fs::metadata(path).map_err(|err| err.to_pyexception(vm))?;
498-
Ok(metadata.is_dir())
493+
let metadata = fs::metadata(path);
494+
match metadata {
495+
Ok(meta) => Ok(meta.is_dir()),
496+
Err(err) => {
497+
if err.kind() == io::ErrorKind::NotFound {
498+
return Ok(false);
499+
}
500+
Err(err.to_pyexception(vm))
501+
}
502+
}
499503
}
500504

501505
#[pyfunction]
@@ -507,8 +511,16 @@ pub(crate) mod module {
507511
if path.exists() {
508512
return Ok(false);
509513
}
510-
let metadata = fs::metadata(path).map_err(|err| err.to_pyexception(vm))?;
511-
Ok(metadata.is_file())
514+
let metadata = fs::metadata(path);
515+
match metadata {
516+
Ok(meta) => Ok(meta.is_file()),
517+
Err(err) => {
518+
if err.kind() == io::ErrorKind::NotFound {
519+
return Ok(false);
520+
}
521+
Err(err.to_pyexception(vm))
522+
}
523+
}
512524
}
513525

514526
#[pyfunction]
@@ -520,8 +532,16 @@ pub(crate) mod module {
520532
if path.exists() {
521533
return Ok(false);
522534
}
523-
let metadata = fs::symlink_metadata(path).map_err(|err| err.to_pyexception(vm))?;
524-
Ok(metadata.file_type().is_symlink())
535+
let metadata = fs::symlink_metadata(path);
536+
match metadata {
537+
Ok(meta) => Ok(meta.file_type().is_symlink()),
538+
Err(err) => {
539+
if err.kind() == io::ErrorKind::NotFound {
540+
return Ok(false);
541+
}
542+
Err(err.to_pyexception(vm))
543+
}
544+
}
525545
}
526546

527547
// End of functions that are not fully compatible with CPython

0 commit comments

Comments
 (0)