diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2021-09-01 09:23:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-01 09:23:29 +0200 |
| commit | 59588a9a5645b922bfd72668382e36b48faa1add (patch) | |
| tree | 44d3183e5f7679c51c6d5649a873917176403aa5 | |
| parent | bbc94ed32982eb4a12a0778837e17581e885d59e (diff) | |
| parent | 0e0c8aef87fe78c797a455d34e7490254f3d22b2 (diff) | |
| download | rust-59588a9a5645b922bfd72668382e36b48faa1add.tar.gz rust-59588a9a5645b922bfd72668382e36b48faa1add.zip | |
Rollup merge of #88542 - tavianator:readdir_r-errno, r=jyn514
Use the return value of readdir_r() instead of errno POSIX says: > If successful, the readdir_r() function shall return zero; otherwise, > an error number shall be returned to indicate the error. But we were previously using errno instead of the return value. This led to issue #86649.
| -rw-r--r-- | library/std/src/sys/unix/fs.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/library/std/src/sys/unix/fs.rs b/library/std/src/sys/unix/fs.rs index 6075eb5c7c5..6d7524a733a 100644 --- a/library/std/src/sys/unix/fs.rs +++ b/library/std/src/sys/unix/fs.rs @@ -506,7 +506,8 @@ impl Iterator for ReadDir { let mut ret = DirEntry { entry: mem::zeroed(), dir: Arc::clone(&self.inner) }; let mut entry_ptr = ptr::null_mut(); loop { - if readdir64_r(self.inner.dirp.0, &mut ret.entry, &mut entry_ptr) != 0 { + let err = readdir64_r(self.inner.dirp.0, &mut ret.entry, &mut entry_ptr); + if err != 0 { if entry_ptr.is_null() { // We encountered an error (which will be returned in this iteration), but // we also reached the end of the directory stream. The `end_of_stream` @@ -514,7 +515,7 @@ impl Iterator for ReadDir { // (instead of looping forever) self.end_of_stream = true; } - return Some(Err(Error::last_os_error())); + return Some(Err(Error::from_raw_os_error(err))); } if entry_ptr.is_null() { return None; |
