move IO traits to std/src/os/hermit
By moving the IO traits, the RustyHermit support is harmonized to of other operating systems.
This commit is contained in:
parent
7143379a52
commit
b5fb4f3d9b
@ -1,6 +0,0 @@
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
use hermit_abi as abi;
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub type RawFd = abi::FileDescriptor;
|
10
library/std/src/os/hermit/io/mod.rs
Normal file
10
library/std/src/os/hermit/io/mod.rs
Normal file
@ -0,0 +1,10 @@
|
||||
#![stable(feature = "os_fd", since = "1.66.0")]
|
||||
|
||||
mod owned;
|
||||
mod raw;
|
||||
|
||||
// Export the types and traits for the public API.
|
||||
#[stable(feature = "os_fd", since = "1.66.0")]
|
||||
pub use owned::*;
|
||||
#[stable(feature = "os_fd", since = "1.66.0")]
|
||||
pub use raw::*;
|
@ -1,9 +1,8 @@
|
||||
use super::raw::RawFd;
|
||||
|
||||
use super::raw::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
|
||||
use crate::fmt;
|
||||
use crate::marker::PhantomData;
|
||||
use crate::mem::forget;
|
||||
use crate::sys::fd::{AsRawFd, FromRawFd, IntoRawFd};
|
||||
use crate::sys::hermit::abi;
|
||||
use crate::os::hermit::abi;
|
||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
||||
|
||||
/// A borrowed file descriptor.
|
||||
@ -49,7 +48,6 @@ pub struct BorrowedFd<'fd> {
|
||||
#[rustc_layout_scalar_valid_range_end(0xFF_FF_FF_FE)]
|
||||
#[rustc_nonnull_optimization_guaranteed]
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
#[derive(Debug)]
|
||||
pub struct OwnedFd {
|
||||
fd: RawFd,
|
||||
}
|
||||
@ -71,6 +69,35 @@ impl BorrowedFd<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl Drop for OwnedFd {
|
||||
#[inline]
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
// Note that errors are ignored when closing a file descriptor. The
|
||||
// reason for this is that if an error occurs we don't actually know if
|
||||
// the file descriptor was closed or not, and if we retried (for
|
||||
// something like EINTR), we might close another valid file descriptor
|
||||
// opened after we closed ours.
|
||||
let _ = abi::close(self.fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl fmt::Debug for BorrowedFd<'_> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("BorrowedFd").field("fd", &self.fd).finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl fmt::Debug for OwnedFd {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("OwnedFd").field("fd", &self.fd).finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsRawFd for BorrowedFd<'_> {
|
||||
#[inline]
|
||||
@ -113,14 +140,6 @@ impl FromRawFd for OwnedFd {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for crate::net::TcpStream {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.as_inner().socket().as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl From<crate::net::TcpStream> for OwnedFd {
|
||||
#[inline]
|
||||
@ -139,14 +158,6 @@ impl From<OwnedFd> for crate::net::TcpStream {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for crate::net::TcpListener {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.as_inner().socket().as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl From<crate::net::TcpListener> for OwnedFd {
|
||||
#[inline]
|
||||
@ -165,14 +176,6 @@ impl From<OwnedFd> for crate::net::TcpListener {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for crate::net::UdpSocket {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.as_inner().socket().as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl From<crate::net::UdpSocket> for OwnedFd {
|
||||
#[inline]
|
||||
@ -191,21 +194,8 @@ impl From<OwnedFd> for crate::net::UdpSocket {
|
||||
}
|
||||
}
|
||||
|
||||
/// A trait to borrow the file descriptor from an underlying object.
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl Drop for OwnedFd {
|
||||
#[inline]
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
// Note that errors are ignored when closing a file descriptor. The
|
||||
// reason for this is that if an error occurs we don't actually know if
|
||||
// the file descriptor was closed or not, and if we retried (for
|
||||
// something like EINTR), we might close another valid file descriptor
|
||||
// opened after we closed ours.
|
||||
let _ = abi::close(self.fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub trait AsFd {
|
||||
/// Borrows the file descriptor.
|
||||
///
|
||||
@ -226,6 +216,22 @@ pub trait AsFd {
|
||||
fn as_fd(&self) -> BorrowedFd<'_>;
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl<T: AsFd> AsFd for &T {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
T::as_fd(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl<T: AsFd> AsFd for &mut T {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
T::as_fd(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for OwnedFd {
|
||||
#[inline]
|
||||
@ -236,3 +242,27 @@ impl AsFd for OwnedFd {
|
||||
unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for crate::net::UdpSocket {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.as_inner().socket().as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for crate::net::TcpListener {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.as_inner().socket().as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "io_safety", since = "1.63.0")]
|
||||
impl AsFd for crate::net::TcpStream {
|
||||
#[inline]
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.as_inner().socket().as_fd()
|
||||
}
|
||||
}
|
@ -1,6 +1,11 @@
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
#[allow(unused_extern_crates)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub extern crate hermit_abi as abi;
|
||||
|
||||
pub mod ffi;
|
||||
pub mod io;
|
||||
|
||||
/// A prelude for conveniently writing platform-specific code.
|
||||
///
|
||||
|
@ -60,16 +60,6 @@ pub mod windows {}
|
||||
all(target_vendor = "fortanix", target_env = "sgx")
|
||||
)
|
||||
)))]
|
||||
#[cfg(target_os = "hermit")]
|
||||
#[path = "hermit/mod.rs"]
|
||||
pub mod unix;
|
||||
#[cfg(not(all(
|
||||
doc,
|
||||
any(
|
||||
all(target_arch = "wasm32", not(target_os = "wasi")),
|
||||
all(target_vendor = "fortanix", target_env = "sgx")
|
||||
)
|
||||
)))]
|
||||
#[cfg(all(not(target_os = "hermit"), any(unix, doc)))]
|
||||
pub mod unix;
|
||||
|
||||
@ -123,6 +113,8 @@ pub mod freebsd;
|
||||
pub mod fuchsia;
|
||||
#[cfg(target_os = "haiku")]
|
||||
pub mod haiku;
|
||||
#[cfg(target_os = "hermit")]
|
||||
pub mod hermit;
|
||||
#[cfg(target_os = "horizon")]
|
||||
pub mod horizon;
|
||||
#[cfg(target_os = "illumos")]
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::ffi::{c_char, CStr, OsString};
|
||||
use crate::fmt;
|
||||
use crate::os::unix::ffi::OsStringExt;
|
||||
use crate::os::hermit::ffi::OsStringExt;
|
||||
use crate::ptr;
|
||||
use crate::sync::atomic::{
|
||||
AtomicIsize, AtomicPtr,
|
||||
|
@ -1,16 +1,13 @@
|
||||
#![unstable(reason = "not public", issue = "none", feature = "fd")]
|
||||
|
||||
mod owned;
|
||||
mod raw;
|
||||
|
||||
use crate::io::{self, Read};
|
||||
use crate::os::hermit::io::{FromRawFd, OwnedFd, RawFd};
|
||||
use crate::sys::cvt;
|
||||
use crate::sys::hermit::abi;
|
||||
use crate::sys::unsupported;
|
||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
||||
|
||||
pub use self::owned::*;
|
||||
pub use self::raw::*;
|
||||
use crate::os::hermit::io::*;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct FileDesc {
|
@ -3,12 +3,14 @@ use crate::fmt;
|
||||
use crate::hash::{Hash, Hasher};
|
||||
use crate::io::{self, Error, ErrorKind};
|
||||
use crate::io::{BorrowedCursor, IoSlice, IoSliceMut, SeekFrom};
|
||||
use crate::os::hermit::io::FromRawFd;
|
||||
use crate::path::{Path, PathBuf};
|
||||
use crate::sys::common::small_c_string::run_path_with_cstr;
|
||||
use crate::sys::cvt;
|
||||
use crate::sys::hermit::abi;
|
||||
use crate::sys::hermit::abi::{O_APPEND, O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY};
|
||||
use crate::sys::hermit::fd::{FileDesc, FromRawFd};
|
||||
use crate::sys::hermit::abi::{
|
||||
self, O_APPEND, O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY,
|
||||
};
|
||||
use crate::sys::hermit::fd::FileDesc;
|
||||
use crate::sys::time::SystemTime;
|
||||
use crate::sys::unsupported;
|
||||
|
||||
|
@ -57,9 +57,7 @@ pub mod locks {
|
||||
}
|
||||
|
||||
use crate::io::ErrorKind;
|
||||
|
||||
#[allow(unused_extern_crates)]
|
||||
pub extern crate hermit_abi as abi;
|
||||
use crate::os::hermit::abi;
|
||||
|
||||
pub fn unsupported<T>() -> crate::io::Result<T> {
|
||||
Err(unsupported_err())
|
||||
|
@ -4,7 +4,8 @@ use crate::cmp;
|
||||
use crate::io::{self, IoSlice, IoSliceMut};
|
||||
use crate::mem;
|
||||
use crate::net::{Shutdown, SocketAddr};
|
||||
use crate::sys::fd::{AsFd, AsRawFd, BorrowedFd, FileDesc, FromRawFd, RawFd};
|
||||
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, RawFd};
|
||||
use crate::sys::hermit::fd::FileDesc;
|
||||
use crate::sys::time::Instant;
|
||||
use crate::sys_common::net::{getsockopt, setsockopt, sockaddr_to_addr};
|
||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
||||
|
@ -4,7 +4,7 @@ use crate::ffi::{CStr, OsStr, OsString};
|
||||
use crate::fmt;
|
||||
use crate::io;
|
||||
use crate::marker::PhantomData;
|
||||
use crate::os::unix::ffi::OsStringExt;
|
||||
use crate::os::hermit::ffi::OsStringExt;
|
||||
use crate::path::{self, PathBuf};
|
||||
use crate::str;
|
||||
use crate::sync::Mutex;
|
||||
|
Loading…
x
Reference in New Issue
Block a user