mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-28 20:16:58 +03:00
Rollup merge of #34270 - gkoz:error_file_exists, r=alexcrichton
Add ERROR_FILE_EXISTS to ErrorKind conversion on Windows Bug report: https://users.rust-lang.org/t/detecting-error-kind-for-opening-file/6215 Reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx#error_file_exists
This commit is contained in:
+10
-1
@@ -512,7 +512,7 @@ pub fn create(&mut self, create: bool) -> &mut OpenOptions {
|
||||
/// No file is allowed to exist at the target location, also no (dangling)
|
||||
/// symlink.
|
||||
///
|
||||
/// This option is useful because it as atomic. Otherwise between checking
|
||||
/// This option is useful because it is atomic. Otherwise between checking
|
||||
/// whether a file exists and creating a new one, the file may have been
|
||||
/// created by another process (a TOCTOU race condition / attack).
|
||||
///
|
||||
@@ -1770,6 +1770,15 @@ fn file_test_directoryinfo_readdir() {
|
||||
check!(fs::remove_dir(dir));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn file_create_new_already_exists_error() {
|
||||
let tmpdir = tmpdir();
|
||||
let file = &tmpdir.join("file_create_new_error_exists");
|
||||
check!(fs::File::create(file));
|
||||
let e = fs::OpenOptions::new().write(true).create_new(true).open(file).unwrap_err();
|
||||
assert_eq!(e.kind(), ErrorKind::AlreadyExists);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mkdir_path_already_exists_error() {
|
||||
let tmpdir = tmpdir();
|
||||
|
||||
@@ -181,6 +181,7 @@ fn clone(&self) -> Self { *self }
|
||||
pub const ERROR_INVALID_HANDLE: DWORD = 6;
|
||||
pub const ERROR_NO_MORE_FILES: DWORD = 18;
|
||||
pub const ERROR_HANDLE_EOF: DWORD = 38;
|
||||
pub const ERROR_FILE_EXISTS: DWORD = 80;
|
||||
pub const ERROR_BROKEN_PIPE: DWORD = 109;
|
||||
pub const ERROR_CALL_NOT_IMPLEMENTED: DWORD = 120;
|
||||
pub const ERROR_INSUFFICIENT_BUFFER: DWORD = 122;
|
||||
|
||||
@@ -68,6 +68,7 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind {
|
||||
match errno as c::DWORD {
|
||||
c::ERROR_ACCESS_DENIED => return ErrorKind::PermissionDenied,
|
||||
c::ERROR_ALREADY_EXISTS => return ErrorKind::AlreadyExists,
|
||||
c::ERROR_FILE_EXISTS => return ErrorKind::AlreadyExists,
|
||||
c::ERROR_BROKEN_PIPE => return ErrorKind::BrokenPipe,
|
||||
c::ERROR_FILE_NOT_FOUND => return ErrorKind::NotFound,
|
||||
c::ERROR_PATH_NOT_FOUND => return ErrorKind::NotFound,
|
||||
|
||||
Reference in New Issue
Block a user