diff options
| author | Tomoaki Kawada <kawada@kmckk.co.jp> | 2022-10-13 14:16:12 +0900 |
|---|---|---|
| committer | Tomoaki Kawada <kawada@kmckk.co.jp> | 2022-10-13 15:10:23 +0900 |
| commit | 76bec177bca25a35aa55a364bb8d2d66e0d5d45e (patch) | |
| tree | bfe2eba8c606c1d4686862c9431d5fdcdb9c5d65 | |
| parent | 2a9217601c0e5ae83fa8bca6797137a6d2f7e4e5 (diff) | |
| download | rust-76bec177bca25a35aa55a364bb8d2d66e0d5d45e.tar.gz rust-76bec177bca25a35aa55a364bb8d2d66e0d5d45e.zip | |
kmc-solid: Handle errors returned by `SOLID_FS_ReadDir`
| -rw-r--r-- | library/std/src/sys/solid/fs.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/library/std/src/sys/solid/fs.rs b/library/std/src/sys/solid/fs.rs index 9692222534e..6c66b93a3e1 100644 --- a/library/std/src/sys/solid/fs.rs +++ b/library/std/src/sys/solid/fs.rs @@ -175,15 +175,19 @@ impl Iterator for ReadDir { type Item = io::Result<DirEntry>; fn next(&mut self) -> Option<io::Result<DirEntry>> { - unsafe { - let mut out_dirent = MaybeUninit::uninit(); - error::SolidError::err_if_negative(abi::SOLID_FS_ReadDir( + let entry = unsafe { + let mut out_entry = MaybeUninit::uninit(); + match error::SolidError::err_if_negative(abi::SOLID_FS_ReadDir( self.inner.dirp, - out_dirent.as_mut_ptr(), - )) - .ok()?; - Some(Ok(DirEntry { entry: out_dirent.assume_init(), inner: Arc::clone(&self.inner) })) - } + out_entry.as_mut_ptr(), + )) { + Ok(_) => out_entry.assume_init(), + Err(e) if e.as_raw() == abi::SOLID_ERR_NOTFOUND => return None, + Err(e) => return Some(Err(e.as_io_error())), + } + }; + + (entry.d_name[0] != 0).then(|| Ok(DirEntry { entry, inner: Arc::clone(&self.inner) })) } } |
