Auto merge of #126205 - jieyouxu:rollup-s64z5ng, r=jieyouxu · model-checking/verify-rust-std@cf9de23
@@ -18,7 +18,8 @@ use crate::sys::{c, cvt, Align8};
1818use crate::sys_common::{AsInner, FromInner, IntoInner};
1919use crate::thread;
202021-use super::{api, to_u16s, IoResult};
21+use super::api::{self, WinError};
22+use super::{to_u16s, IoResult};
2223use crate::sys::path::maybe_verbatim;
23242425pub struct File {
@@ -130,10 +131,11 @@ impl Iterator for ReadDir {
130131let mut wfd = mem::zeroed();
131132loop {
132133if c::FindNextFileW(self.handle.0, &mut wfd) == 0 {
133-if api::get_last_error().code == c::ERROR_NO_MORE_FILES {
134-return None;
135-} else {
136-return Some(Err(Error::last_os_error()));
134+match api::get_last_error() {
135+WinError::NO_MORE_FILES => return None,
136+WinError { code } => {
137+return Some(Err(Error::from_raw_os_error(code as i32)));
138+}
137139}
138140}
139141if let Some(e) = DirEntry::new(&self.root, &wfd) {
@@ -244,8 +246,6 @@ impl OpenOptions {
244246}
245247246248fn get_access_mode(&self) -> io::Result<c::DWORD> {
247-const ERROR_INVALID_PARAMETER: i32 = 87;
248-249249match (self.read, self.write, self.append, self.access_mode) {
250250(.., Some(mode)) => Ok(mode),
251251(true, false, false, None) => Ok(c::GENERIC_READ),
@@ -255,23 +255,23 @@ impl OpenOptions {
255255(true, _, true, None) => {
256256Ok(c::GENERIC_READ | (c::FILE_GENERIC_WRITE & !c::FILE_WRITE_DATA))
257257}
258-(false, false, false, None) => Err(Error::from_raw_os_error(ERROR_INVALID_PARAMETER)),
258+(false, false, false, None) => {
259+Err(Error::from_raw_os_error(c::ERROR_INVALID_PARAMETER as i32))
260+}
259261}
260262}
261263262264fn get_creation_mode(&self) -> io::Result<c::DWORD> {
263-const ERROR_INVALID_PARAMETER: i32 = 87;
264-265265match (self.write, self.append) {
266266(true, false) => {}
267267(false, false) => {
268268if self.truncate || self.create || self.create_new {
269-return Err(Error::from_raw_os_error(ERROR_INVALID_PARAMETER));
269+return Err(Error::from_raw_os_error(c::ERROR_INVALID_PARAMETER as i32));
270270}
271271}
272272(_, true) => {
273273if self.truncate && !self.create_new {
274-return Err(Error::from_raw_os_error(ERROR_INVALID_PARAMETER));
274+return Err(Error::from_raw_os_error(c::ERROR_INVALID_PARAMETER as i32));
275275}
276276}
277277}
@@ -315,7 +315,7 @@ impl File {
315315// Manual truncation. See #115745.
316316if opts.truncate
317317&& creation == c::OPEN_ALWAYS
318-&& unsafe { c::GetLastError() } == c::ERROR_ALREADY_EXISTS
318+&& api::get_last_error() == WinError::ALREADY_EXISTS
319319{
320320unsafe {
321321// This originally used `FileAllocationInfo` instead of
@@ -845,7 +845,7 @@ fn open_link_no_reparse(parent: &File, name: &[u16], access: u32) -> io::Result<
845845// We make a special exception for `STATUS_DELETE_PENDING` because
846846// otherwise this will be mapped to `ERROR_ACCESS_DENIED` which is
847847// very unhelpful.
848-Err(io::Error::from_raw_os_error(c::ERROR_DELETE_PENDING as _))
848+Err(io::Error::from_raw_os_error(c::ERROR_DELETE_PENDING as i32))
849849} else if status == c::STATUS_INVALID_PARAMETER
850850&& ATTRIBUTES.load(Ordering::Relaxed) == c::OBJ_DONT_REPARSE
851851{
@@ -1097,7 +1097,7 @@ pub fn readdir(p: &Path) -> io::Result<ReadDir> {
10971097//
10981098// See issue #120040: https://github.com/rust-lang/rust/issues/120040.
10991099let last_error = api::get_last_error();
1100-if last_error.code == c::ERROR_FILE_NOT_FOUND {
1100+if last_error == WinError::FILE_NOT_FOUND {
11011101return Ok(ReadDir {
11021102handle: FindNextFileHandle(find_handle),
11031103root: Arc::new(root),