mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Move fs into sys
This commit is contained in:
parent
9bdd92118c
commit
685619e4c9
@ -1,18 +1,18 @@
|
||||
use super::fd::FileDesc;
|
||||
use super::hermit_abi::{
|
||||
self, DT_DIR, DT_LNK, DT_REG, DT_UNKNOWN, O_APPEND, O_CREAT, O_DIRECTORY, O_EXCL, O_RDONLY,
|
||||
O_RDWR, O_TRUNC, O_WRONLY, S_IFDIR, S_IFLNK, S_IFMT, S_IFREG, dirent64, stat as stat_struct,
|
||||
};
|
||||
use crate::ffi::{CStr, OsStr, OsString, c_char};
|
||||
use crate::io::{self, BorrowedCursor, Error, ErrorKind, IoSlice, IoSliceMut, SeekFrom};
|
||||
use crate::os::hermit::ffi::OsStringExt;
|
||||
use crate::os::hermit::hermit_abi::{
|
||||
self, DT_DIR, DT_LNK, DT_REG, DT_UNKNOWN, O_APPEND, O_CREAT, O_DIRECTORY, O_EXCL, O_RDONLY,
|
||||
O_RDWR, O_TRUNC, O_WRONLY, S_IFDIR, S_IFLNK, S_IFMT, S_IFREG, dirent64, stat as stat_struct,
|
||||
};
|
||||
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
|
||||
use crate::path::{Path, PathBuf};
|
||||
use crate::sync::Arc;
|
||||
use crate::sys::common::small_c_string::run_path_with_cstr;
|
||||
pub use crate::sys::fs::common::{copy, exists};
|
||||
use crate::sys::pal::fd::FileDesc;
|
||||
use crate::sys::time::SystemTime;
|
||||
use crate::sys::{cvt, unsupported};
|
||||
pub use crate::sys_common::fs::{copy, exists};
|
||||
use crate::sys_common::{AsInner, AsInnerMut, FromInner, IntoInner};
|
||||
use crate::{fmt, mem};
|
||||
|
28
library/std/src/sys/fs/mod.rs
Normal file
28
library/std/src/sys/fs/mod.rs
Normal file
@ -0,0 +1,28 @@
|
||||
#![deny(unsafe_op_in_unsafe_fn)]
|
||||
|
||||
pub mod common;
|
||||
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(target_family = "unix")] {
|
||||
mod unix;
|
||||
pub use unix::*;
|
||||
} else if #[cfg(target_os = "windows")] {
|
||||
mod windows;
|
||||
pub use windows::*;
|
||||
} else if #[cfg(target_os = "hermit")] {
|
||||
mod hermit;
|
||||
pub use hermit::*;
|
||||
} else if #[cfg(target_os = "solid_asp3")] {
|
||||
mod solid;
|
||||
pub use solid::*;
|
||||
} else if #[cfg(target_os = "uefi")] {
|
||||
mod uefi;
|
||||
pub use uefi::*;
|
||||
} else if #[cfg(target_os = "wasi")] {
|
||||
mod wasi;
|
||||
pub use wasi::*;
|
||||
} else {
|
||||
mod unsupported;
|
||||
pub use unsupported::*;
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
use super::{abi, error};
|
||||
#![allow(dead_code)]
|
||||
|
||||
use crate::ffi::{CStr, CString, OsStr, OsString};
|
||||
use crate::fmt;
|
||||
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut, SeekFrom};
|
||||
@ -7,9 +8,10 @@ use crate::os::raw::{c_int, c_short};
|
||||
use crate::os::solid::ffi::OsStrExt;
|
||||
use crate::path::{Path, PathBuf};
|
||||
use crate::sync::Arc;
|
||||
pub use crate::sys::fs::common::exists;
|
||||
use crate::sys::pal::{abi, error};
|
||||
use crate::sys::time::SystemTime;
|
||||
use crate::sys::unsupported;
|
||||
pub use crate::sys_common::fs::exists;
|
||||
use crate::sys_common::ignore_notfound;
|
||||
|
||||
type CIntNotMinusOne = core::num::niche_types::NotAllOnes<c_int>;
|
@ -1,3 +1,5 @@
|
||||
#![allow(nonstandard_style)]
|
||||
#![allow(unsafe_op_in_unsafe_fn)]
|
||||
// miri has some special hacks here that make things unused.
|
||||
#![cfg_attr(miri, allow(unused))]
|
||||
|
||||
@ -79,13 +81,13 @@ use crate::path::{Path, PathBuf};
|
||||
use crate::sync::Arc;
|
||||
use crate::sys::common::small_c_string::run_path_with_cstr;
|
||||
use crate::sys::fd::FileDesc;
|
||||
pub use crate::sys::fs::common::exists;
|
||||
use crate::sys::time::SystemTime;
|
||||
#[cfg(all(target_os = "linux", target_env = "gnu"))]
|
||||
use crate::sys::weak::syscall;
|
||||
#[cfg(target_os = "android")]
|
||||
use crate::sys::weak::weak;
|
||||
use crate::sys::{cvt, cvt_r};
|
||||
pub use crate::sys_common::fs::exists;
|
||||
use crate::sys_common::{AsInner, AsInnerMut, FromInner, IntoInner};
|
||||
use crate::{mem, ptr};
|
||||
|
||||
@ -699,6 +701,8 @@ impl Iterator for ReadDir {
|
||||
target_os = "hurd",
|
||||
))]
|
||||
fn next(&mut self) -> Option<io::Result<DirEntry>> {
|
||||
use crate::sys::os::{errno, set_errno};
|
||||
|
||||
if self.end_of_stream {
|
||||
return None;
|
||||
}
|
||||
@ -710,7 +714,7 @@ impl Iterator for ReadDir {
|
||||
// with unlimited or variable NAME_MAX. Many modern platforms guarantee
|
||||
// thread safety for readdir() as long an individual DIR* is not accessed
|
||||
// concurrently, which is sufficient for Rust.
|
||||
super::os::set_errno(0);
|
||||
set_errno(0);
|
||||
let entry_ptr: *const dirent64 = readdir64(self.inner.dirp.0);
|
||||
if entry_ptr.is_null() {
|
||||
// We either encountered an error, or reached the end. Either way,
|
||||
@ -719,7 +723,7 @@ impl Iterator for ReadDir {
|
||||
|
||||
// To distinguish between errors and end-of-directory, we had to clear
|
||||
// errno beforehand to check for an error now.
|
||||
return match super::os::errno() {
|
||||
return match errno() {
|
||||
0 => None,
|
||||
e => Some(Err(Error::from_raw_os_error(e))),
|
||||
};
|
||||
@ -1932,7 +1936,7 @@ pub fn canonicalize(p: &Path) -> io::Result<PathBuf> {
|
||||
|
||||
fn open_from(from: &Path) -> io::Result<(crate::fs::File, crate::fs::Metadata)> {
|
||||
use crate::fs::File;
|
||||
use crate::sys_common::fs::NOT_FILE_ERROR;
|
||||
use crate::sys::fs::common::NOT_FILE_ERROR;
|
||||
|
||||
let reader = File::open(from)?;
|
||||
let metadata = reader.metadata()?;
|
||||
@ -2151,7 +2155,7 @@ pub use remove_dir_impl::remove_dir_all;
|
||||
miri
|
||||
))]
|
||||
mod remove_dir_impl {
|
||||
pub use crate::sys_common::fs::remove_dir_all;
|
||||
pub use crate::sys::fs::common::remove_dir_all;
|
||||
}
|
||||
|
||||
// Modern implementation using openat(), unlinkat() and fdopendir()
|
@ -1,4 +1,4 @@
|
||||
use crate::sys::pal::unix::fs::FilePermissions;
|
||||
use crate::sys::fs::FilePermissions;
|
||||
|
||||
#[test]
|
||||
fn test_debug_permissions() {
|
@ -1,6 +1,3 @@
|
||||
#![forbid(unsafe_op_in_unsafe_fn)]
|
||||
|
||||
use super::fd::WasiFd;
|
||||
use crate::ffi::{CStr, OsStr, OsString};
|
||||
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut, SeekFrom};
|
||||
use crate::mem::{self, ManuallyDrop};
|
||||
@ -10,9 +7,10 @@ use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd
|
||||
use crate::path::{Path, PathBuf};
|
||||
use crate::sync::Arc;
|
||||
use crate::sys::common::small_c_string::run_path_with_cstr;
|
||||
use crate::sys::fd::WasiFd;
|
||||
pub use crate::sys::fs::common::exists;
|
||||
use crate::sys::time::SystemTime;
|
||||
use crate::sys::unsupported;
|
||||
pub use crate::sys_common::fs::exists;
|
||||
use crate::sys_common::{AsInner, FromInner, IntoInner, ignore_notfound};
|
||||
use crate::{fmt, iter, ptr};
|
||||
|
@ -1,5 +1,5 @@
|
||||
use super::api::{self, WinError, set_file_information_by_handle};
|
||||
use super::{IoResult, to_u16s};
|
||||
#![allow(nonstandard_style)]
|
||||
|
||||
use crate::alloc::{Layout, alloc, dealloc};
|
||||
use crate::borrow::Cow;
|
||||
use crate::ffi::{OsStr, OsString, c_void};
|
||||
@ -10,6 +10,8 @@ use crate::os::windows::prelude::*;
|
||||
use crate::path::{Path, PathBuf};
|
||||
use crate::sync::Arc;
|
||||
use crate::sys::handle::Handle;
|
||||
use crate::sys::pal::api::{self, WinError, set_file_information_by_handle};
|
||||
use crate::sys::pal::{IoResult, fill_utf16_buf, to_u16s, truncate_utf16_at_nul};
|
||||
use crate::sys::path::maybe_verbatim;
|
||||
use crate::sys::time::SystemTime;
|
||||
use crate::sys::{Align8, c, cvt};
|
||||
@ -167,7 +169,7 @@ impl DirEntry {
|
||||
}
|
||||
|
||||
pub fn file_name(&self) -> OsString {
|
||||
let filename = super::truncate_utf16_at_nul(&self.data.cFileName);
|
||||
let filename = truncate_utf16_at_nul(&self.data.cFileName);
|
||||
OsString::from_wide(filename)
|
||||
}
|
||||
|
||||
@ -695,7 +697,7 @@ impl File {
|
||||
// Turn `\??\` into `\\?\` (a verbatim path).
|
||||
subst[1] = b'\\' as u16;
|
||||
// Attempt to convert to a more user-friendly path.
|
||||
let user = super::args::from_wide_to_user_path(
|
||||
let user = crate::sys::args::from_wide_to_user_path(
|
||||
subst.iter().copied().chain([0]).collect(),
|
||||
)?;
|
||||
Ok(PathBuf::from(OsString::from_wide(user.strip_suffix(&[0]).unwrap_or(&user))))
|
||||
@ -1492,7 +1494,7 @@ pub fn set_perm(p: &Path, perm: FilePermissions) -> io::Result<()> {
|
||||
}
|
||||
|
||||
fn get_path(f: &File) -> io::Result<PathBuf> {
|
||||
super::fill_utf16_buf(
|
||||
fill_utf16_buf(
|
||||
|buf, sz| unsafe {
|
||||
c::GetFinalPathNameByHandleW(f.handle.as_raw_handle(), buf, sz, c::VOLUME_NAME_DOS)
|
||||
},
|
@ -33,7 +33,7 @@ use core::sync::atomic::{AtomicU32, Ordering};
|
||||
|
||||
use super::{AsRawHandle, DirBuff, File, FromRawHandle};
|
||||
use crate::sys::c;
|
||||
use crate::sys::pal::windows::api::WinError;
|
||||
use crate::sys::pal::api::WinError;
|
||||
use crate::thread;
|
||||
|
||||
// The maximum number of times to spin when waiting for deletes to complete.
|
@ -12,6 +12,7 @@ pub mod anonymous_pipe;
|
||||
pub mod backtrace;
|
||||
pub mod cmath;
|
||||
pub mod exit_guard;
|
||||
pub mod fs;
|
||||
pub mod io;
|
||||
pub mod net;
|
||||
pub mod os_str;
|
||||
|
@ -21,7 +21,6 @@ use crate::os::raw::c_char;
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
pub mod fd;
|
||||
pub mod fs;
|
||||
pub mod futex;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -12,8 +12,6 @@ pub mod abi;
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
pub mod fd;
|
||||
#[path = "../unsupported/fs.rs"]
|
||||
pub mod fs;
|
||||
mod libunwind_integration;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -22,7 +22,6 @@ pub mod env;
|
||||
// `error` is `pub(crate)` so that it can be accessed by `itron/error.rs` as
|
||||
// `crate::sys::error`
|
||||
pub(crate) mod error;
|
||||
pub mod fs;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -35,7 +35,7 @@ impl SystemTime {
|
||||
SystemTime(t)
|
||||
}
|
||||
|
||||
pub(super) fn from_time_t(t: abi::time_t) -> Self {
|
||||
pub fn from_time_t(t: abi::time_t) -> Self {
|
||||
Self(t)
|
||||
}
|
||||
|
||||
|
@ -11,8 +11,6 @@ pub mod args;
|
||||
#[path = "../unsupported/env.rs"]
|
||||
pub mod env;
|
||||
//pub mod fd;
|
||||
#[path = "../unsupported/fs.rs"]
|
||||
pub mod fs;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -15,7 +15,6 @@
|
||||
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
pub mod fs;
|
||||
pub mod helpers;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -9,7 +9,6 @@ pub mod weak;
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
pub mod fd;
|
||||
pub mod fs;
|
||||
pub mod futex;
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
pub mod kernel_copy;
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
pub mod fs;
|
||||
pub mod os;
|
||||
pub mod pipe;
|
||||
pub mod process;
|
||||
|
@ -16,7 +16,6 @@
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
pub mod fd;
|
||||
pub mod fs;
|
||||
#[allow(unused)]
|
||||
#[path = "../wasm/atomics/futex.rs"]
|
||||
pub mod futex;
|
||||
|
@ -12,8 +12,6 @@ pub mod args;
|
||||
pub mod env;
|
||||
#[path = "../wasi/fd.rs"]
|
||||
pub mod fd;
|
||||
#[path = "../wasi/fs.rs"]
|
||||
pub mod fs;
|
||||
#[allow(unused)]
|
||||
#[path = "../wasm/atomics/futex.rs"]
|
||||
pub mod futex;
|
||||
|
@ -19,8 +19,6 @@
|
||||
#[path = "../unsupported/args.rs"]
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
#[path = "../unsupported/fs.rs"]
|
||||
pub mod fs;
|
||||
#[path = "../unsupported/os.rs"]
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -17,7 +17,6 @@ pub mod api;
|
||||
pub mod args;
|
||||
pub mod c;
|
||||
pub mod env;
|
||||
pub mod fs;
|
||||
#[cfg(not(target_vendor = "win7"))]
|
||||
pub mod futex;
|
||||
pub mod handle;
|
||||
@ -37,7 +36,7 @@ cfg_if::cfg_if! {
|
||||
}
|
||||
|
||||
/// Map a [`Result<T, WinError>`] to [`io::Result<T>`](crate::io::Result<T>).
|
||||
trait IoResult<T> {
|
||||
pub trait IoResult<T> {
|
||||
fn io_result(self) -> crate::io::Result<T>;
|
||||
}
|
||||
impl<T> IoResult<T> for Result<T, api::WinError> {
|
||||
|
@ -3,8 +3,6 @@
|
||||
pub mod args;
|
||||
#[path = "../unsupported/env.rs"]
|
||||
pub mod env;
|
||||
#[path = "../unsupported/fs.rs"]
|
||||
pub mod fs;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -14,8 +14,6 @@ pub mod abi;
|
||||
#[path = "../zkvm/args.rs"]
|
||||
pub mod args;
|
||||
pub mod env;
|
||||
#[path = "../unsupported/fs.rs"]
|
||||
pub mod fs;
|
||||
pub mod os;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -20,7 +20,6 @@
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
pub mod fs;
|
||||
pub mod process;
|
||||
pub mod wstr;
|
||||
pub mod wtf8;
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: unsupported operation: `open` not available when isolation is enabled
|
||||
--> RUSTLIB/std/src/sys/pal/PLATFORM/fs.rs:LL:CC
|
||||
--> RUSTLIB/std/src/sys/fs/PLATFORM.rs:LL:CC
|
||||
|
|
||||
LL | let fd = cvt_r(|| unsafe { open64(path.as_ptr(), flags, opts.mode as c_int) })?;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `open` not available when isolation is enabled
|
||||
@ -7,14 +7,14 @@ LL | let fd = cvt_r(|| unsafe { open64(path.as_ptr(), flags, opts.mode a
|
||||
= help: set `MIRIFLAGS=-Zmiri-disable-isolation` to disable isolation;
|
||||
= help: or set `MIRIFLAGS=-Zmiri-isolation-error=warn` to make Miri return an error code from isolated operations (if supported for that operation) and continue with a warning
|
||||
= note: BACKTRACE:
|
||||
= note: inside closure at RUSTLIB/std/src/sys/pal/PLATFORM/fs.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::cvt_r::<i32, {closure@std::sys::pal::PLATFORM::fs::File::open_c::{closure#0}}>` at RUSTLIB/std/src/sys/pal/PLATFORM/mod.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::fs::File::open_c` at RUSTLIB/std/src/sys/pal/PLATFORM/fs.rs:LL:CC
|
||||
= note: inside closure at RUSTLIB/std/src/sys/pal/PLATFORM/fs.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::small_c_string::run_with_cstr_stack::<std::sys::pal::PLATFORM::fs::File>` at RUSTLIB/std/src/sys/pal/PLATFORM/small_c_string.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::small_c_string::run_with_cstr::<std::sys::pal::PLATFORM::fs::File>` at RUSTLIB/std/src/sys/pal/PLATFORM/small_c_string.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::small_c_string::run_path_with_cstr::<std::sys::pal::PLATFORM::fs::File>` at RUSTLIB/std/src/sys/pal/PLATFORM/small_c_string.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::fs::File::open` at RUSTLIB/std/src/sys/pal/PLATFORM/fs.rs:LL:CC
|
||||
= note: inside closure at RUSTLIB/std/src/sys/fs/PLATFORM.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::cvt_r::<i32, {closure@std::sys::fs::PLATFORM::File::open_c::{closure#0}}>` at RUSTLIB/std/src/sys/pal/PLATFORM/mod.rs:LL:CC
|
||||
= note: inside `std::sys::fs::PLATFORM::File::open_c` at RUSTLIB/std/src/sys/fs/PLATFORM.rs:LL:CC
|
||||
= note: inside closure at RUSTLIB/std/src/sys/fs/PLATFORM.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::small_c_string::run_with_cstr_stack::<std::sys::fs::PLATFORM::File>` at RUSTLIB/std/src/sys/pal/PLATFORM/small_c_string.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::small_c_string::run_with_cstr::<std::sys::fs::PLATFORM::File>` at RUSTLIB/std/src/sys/pal/PLATFORM/small_c_string.rs:LL:CC
|
||||
= note: inside `std::sys::pal::PLATFORM::small_c_string::run_path_with_cstr::<std::sys::fs::PLATFORM::File>` at RUSTLIB/std/src/sys/pal/PLATFORM/small_c_string.rs:LL:CC
|
||||
= note: inside `std::sys::fs::PLATFORM::File::open` at RUSTLIB/std/src/sys/fs/PLATFORM.rs:LL:CC
|
||||
= note: inside `std::fs::OpenOptions::_open` at RUSTLIB/std/src/fs.rs:LL:CC
|
||||
= note: inside `std::fs::OpenOptions::open::<&std::path::Path>` at RUSTLIB/std/src/fs.rs:LL:CC
|
||||
= note: inside `std::fs::File::open::<&str>` at RUSTLIB/std/src/fs.rs:LL:CC
|
||||
|
Loading…
Reference in New Issue
Block a user