@@ -18,7 +18,8 @@ use crate::sys::{c, cvt, Align8};
1818use crate::sys_common::{AsInner, FromInner, IntoInner};
1919use crate::thread;
2020
21- use super::{api, to_u16s, IoResult};
21+ use super::api::{self, WinError};
22+ use super::{to_u16s, IoResult};
2223use crate::sys::path::maybe_verbatim;
2324
2425pub struct File {
@@ -130,10 +131,11 @@ impl Iterator for ReadDir {
130131 let mut wfd = mem::zeroed();
131132 loop {
132133 if 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 }
139141 if let Some(e) = DirEntry::new(&self.root, &wfd) {
@@ -244,8 +246,6 @@ impl OpenOptions {
244246 }
245247
246248 fn get_access_mode(&self) -> io::Result<c::DWORD> {
247- const ERROR_INVALID_PARAMETER: i32 = 87;
248-
249249 match (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) => {
256256 Ok(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 }
261263
262264 fn get_creation_mode(&self) -> io::Result<c::DWORD> {
263- const ERROR_INVALID_PARAMETER: i32 = 87;
264-
265265 match (self.write, self.append) {
266266 (true, false) => {}
267267 (false, false) => {
268268 if 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) => {
273273 if 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.
316316 if opts.truncate
317317 && creation == c::OPEN_ALWAYS
318- && unsafe { c::GetLastError () } == c::ERROR_ALREADY_EXISTS
318+ && api::get_last_error () == WinError::ALREADY_EXISTS
319319 {
320320 unsafe {
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.
10991099 let last_error = api::get_last_error();
1100- if last_error.code == c::ERROR_FILE_NOT_FOUND {
1100+ if last_error == WinError::FILE_NOT_FOUND {
11011101 return Ok(ReadDir {
11021102 handle: FindNextFileHandle(find_handle),
11031103 root: Arc::new(root),
0 commit comments