1
Fork 0

Rollup merge of #84212 - CDirkx:void, r=m-ou-se

Replace `Void` in `sys` with never type

This PR replaces several occurrences in `sys` of the type `enum Void {}` with the Rust never type (`!`).
The name `Void` is unfortunate because in other languages (C etc.) it refers to a unit type, not an uninhabited type.

Note that the previous stabilization of the never type was reverted, however all uses here are implementation details and not publicly visible.
This commit is contained in:
Mara Bos 2021-04-21 23:06:14 +02:00 committed by GitHub
commit 31b83802a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 238 additions and 252 deletions

View file

@ -9,7 +9,7 @@ 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;
use crate::sys::time::SystemTime;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::sys_common::os_str_bytes::OsStrExt;
pub use crate::sys_common::fs::copy;
@ -22,11 +22,11 @@ fn cstr(path: &Path) -> io::Result<CString> {
#[derive(Debug)]
pub struct File(FileDesc);
pub struct FileAttr(Void);
pub struct FileAttr(!);
pub struct ReadDir(Void);
pub struct ReadDir(!);
pub struct DirEntry(Void);
pub struct DirEntry(!);
#[derive(Clone, Debug)]
pub struct OpenOptions {
@ -41,64 +41,64 @@ pub struct OpenOptions {
mode: i32,
}
pub struct FilePermissions(Void);
pub struct FilePermissions(!);
pub struct FileType(Void);
pub struct FileType(!);
#[derive(Debug)]
pub struct DirBuilder {}
impl FileAttr {
pub fn size(&self) -> u64 {
match self.0 {}
self.0
}
pub fn perm(&self) -> FilePermissions {
match self.0 {}
self.0
}
pub fn file_type(&self) -> FileType {
match self.0 {}
self.0
}
pub fn modified(&self) -> io::Result<SystemTime> {
match self.0 {}
self.0
}
pub fn accessed(&self) -> io::Result<SystemTime> {
match self.0 {}
self.0
}
pub fn created(&self) -> io::Result<SystemTime> {
match self.0 {}
self.0
}
}
impl Clone for FileAttr {
fn clone(&self) -> FileAttr {
match self.0 {}
self.0
}
}
impl FilePermissions {
pub fn readonly(&self) -> bool {
match self.0 {}
self.0
}
pub fn set_readonly(&mut self, _readonly: bool) {
match self.0 {}
self.0
}
}
impl Clone for FilePermissions {
fn clone(&self) -> FilePermissions {
match self.0 {}
self.0
}
}
impl PartialEq for FilePermissions {
fn eq(&self, _other: &FilePermissions) -> bool {
match self.0 {}
self.0
}
}
@ -106,27 +106,27 @@ impl Eq for FilePermissions {}
impl fmt::Debug for FilePermissions {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
impl FileType {
pub fn is_dir(&self) -> bool {
match self.0 {}
self.0
}
pub fn is_file(&self) -> bool {
match self.0 {}
self.0
}
pub fn is_symlink(&self) -> bool {
match self.0 {}
self.0
}
}
impl Clone for FileType {
fn clone(&self) -> FileType {
match self.0 {}
self.0
}
}
@ -134,7 +134,7 @@ impl Copy for FileType {}
impl PartialEq for FileType {
fn eq(&self, _other: &FileType) -> bool {
match self.0 {}
self.0
}
}
@ -142,19 +142,19 @@ impl Eq for FileType {}
impl Hash for FileType {
fn hash<H: Hasher>(&self, _h: &mut H) {
match self.0 {}
self.0
}
}
impl fmt::Debug for FileType {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
impl fmt::Debug for ReadDir {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
@ -162,25 +162,25 @@ impl Iterator for ReadDir {
type Item = io::Result<DirEntry>;
fn next(&mut self) -> Option<io::Result<DirEntry>> {
match self.0 {}
self.0
}
}
impl DirEntry {
pub fn path(&self) -> PathBuf {
match self.0 {}
self.0
}
pub fn file_name(&self) -> OsString {
match self.0 {}
self.0
}
pub fn metadata(&self) -> io::Result<FileAttr> {
match self.0 {}
self.0
}
pub fn file_type(&self) -> io::Result<FileType> {
match self.0 {}
self.0
}
}

View file

@ -61,11 +61,6 @@ pub fn unsupported_err() -> crate::io::Error {
)
}
// This enum is used as the storage for a bunch of types which can't actually
// exist.
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
pub enum Void {}
pub unsafe fn strlen(start: *const c_char) -> usize {
let mut str = start;

View file

@ -6,7 +6,7 @@ use crate::str;
use crate::sync::Arc;
use crate::sys::hermit::abi;
use crate::sys::hermit::abi::IpAddress::{Ipv4, Ipv6};
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::sys_common::AsInner;
use crate::time::Duration;
@ -411,18 +411,18 @@ impl fmt::Debug for UdpSocket {
}
}
pub struct LookupHost(Void);
pub struct LookupHost(!);
impl LookupHost {
pub fn port(&self) -> u16 {
match self.0 {}
self.0
}
}
impl Iterator for LookupHost {
type Item = SocketAddr;
fn next(&mut self) -> Option<SocketAddr> {
match self.0 {}
self.0
}
}

View file

@ -9,7 +9,7 @@ use crate::path::{self, PathBuf};
use crate::str;
use crate::sync::Mutex;
use crate::sys::hermit::abi;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::sys_common::os_str_bytes::*;
use crate::vec;
@ -29,7 +29,7 @@ pub fn chdir(_: &path::Path) -> io::Result<()> {
unsupported()
}
pub struct SplitPaths<'a>(&'a Void);
pub struct SplitPaths<'a>(!, PhantomData<&'a ()>);
pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
panic!("unsupported")
@ -38,7 +38,7 @@ pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
impl<'a> Iterator for SplitPaths<'a> {
type Item = PathBuf;
fn next(&mut self) -> Option<PathBuf> {
match *self.0 {}
self.0
}
}

View file

@ -115,11 +115,6 @@ pub fn decode_error_kind(code: i32) -> ErrorKind {
}
}
// This enum is used as the storage for a bunch of types which can't actually
// exist.
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
pub enum Void {}
pub unsafe fn strlen(mut s: *const c_char) -> usize {
let mut n = 0;
while unsafe { *s } != 0 {

View file

@ -5,7 +5,7 @@ use crate::io::{self, IoSlice, IoSliceMut};
use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr, ToSocketAddrs};
use crate::sync::Arc;
use crate::sys::fd::FileDesc;
use crate::sys::{sgx_ineffective, unsupported, AsInner, FromInner, IntoInner, TryIntoInner, Void};
use crate::sys::{sgx_ineffective, unsupported, AsInner, FromInner, IntoInner, TryIntoInner};
use crate::time::Duration;
use super::abi::usercalls;
@ -310,7 +310,7 @@ impl FromInner<Socket> for TcpListener {
}
}
pub struct UdpSocket(Void);
pub struct UdpSocket(!);
impl UdpSocket {
pub fn bind(_: io::Result<&SocketAddr>) -> io::Result<UdpSocket> {
@ -318,129 +318,129 @@ impl UdpSocket {
}
pub fn peer_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn socket_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> {
match self.0 {}
self.0
}
pub fn peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> {
match self.0 {}
self.0
}
pub fn send_to(&self, _: &[u8], _: &SocketAddr) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn duplicate(&self) -> io::Result<UdpSocket> {
match self.0 {}
self.0
}
pub fn set_read_timeout(&self, _: Option<Duration>) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn set_write_timeout(&self, _: Option<Duration>) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn read_timeout(&self) -> io::Result<Option<Duration>> {
match self.0 {}
self.0
}
pub fn write_timeout(&self) -> io::Result<Option<Duration>> {
match self.0 {}
self.0
}
pub fn set_broadcast(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn broadcast(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn set_multicast_loop_v4(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn multicast_loop_v4(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn set_multicast_ttl_v4(&self, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn multicast_ttl_v4(&self) -> io::Result<u32> {
match self.0 {}
self.0
}
pub fn set_multicast_loop_v6(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn multicast_loop_v6(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn join_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn join_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn leave_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn leave_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn set_ttl(&self, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn ttl(&self) -> io::Result<u32> {
match self.0 {}
self.0
}
pub fn take_error(&self) -> io::Result<Option<io::Error>> {
match self.0 {}
self.0
}
pub fn set_nonblocking(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn recv(&self, _: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn peek(&self, _: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn send(&self, _: &[u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn connect(&self, _: io::Result<&SocketAddr>) -> io::Result<()> {
match self.0 {}
self.0
}
}
impl fmt::Debug for UdpSocket {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
@ -462,7 +462,7 @@ impl fmt::Display for NonIpSockAddr {
}
}
pub struct LookupHost(Void);
pub struct LookupHost(!);
impl LookupHost {
fn new(host: String) -> io::Result<LookupHost> {
@ -470,14 +470,14 @@ impl LookupHost {
}
pub fn port(&self) -> u16 {
match self.0 {}
self.0
}
}
impl Iterator for LookupHost {
type Item = SocketAddr;
fn next(&mut self) -> Option<SocketAddr> {
match self.0 {}
self.0
}
}

View file

@ -5,12 +5,13 @@ use crate::error::Error as StdError;
use crate::ffi::{OsStr, OsString};
use crate::fmt;
use crate::io;
use crate::marker::PhantomData;
use crate::path::{self, PathBuf};
use crate::str;
use crate::sync::atomic::{AtomicUsize, Ordering};
use crate::sync::Mutex;
use crate::sync::Once;
use crate::sys::{decode_error_kind, sgx_ineffective, unsupported, Void};
use crate::sys::{decode_error_kind, sgx_ineffective, unsupported};
use crate::vec;
pub fn errno() -> i32 {
@ -35,7 +36,7 @@ pub fn chdir(_: &path::Path) -> io::Result<()> {
sgx_ineffective(())
}
pub struct SplitPaths<'a>(&'a Void);
pub struct SplitPaths<'a>(!, PhantomData<&'a ()>);
pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
panic!("unsupported")
@ -44,7 +45,7 @@ pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
impl<'a> Iterator for SplitPaths<'a> {
type Item = PathBuf;
fn next(&mut self) -> Option<PathBuf> {
match *self.0 {}
self.0
}
}

View file

@ -36,11 +36,6 @@ pub fn hashmap_random_keys() -> (u64, u64) {
(1, 2)
}
// This enum is used as the storage for a bunch of types which can't actually
// exist.
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
pub enum Void {}
pub unsafe fn strlen(mut s: *const c_char) -> usize {
// SAFETY: The caller must guarantee `s` points to a valid 0-terminated string.
unsafe {

View file

@ -4,77 +4,77 @@ use crate::hash::{Hash, Hasher};
use crate::io::{self, IoSlice, IoSliceMut, SeekFrom};
use crate::path::{Path, PathBuf};
use crate::sys::time::SystemTime;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
pub struct File(Void);
pub struct File(!);
pub struct FileAttr(Void);
pub struct FileAttr(!);
pub struct ReadDir(Void);
pub struct ReadDir(!);
pub struct DirEntry(Void);
pub struct DirEntry(!);
#[derive(Clone, Debug)]
pub struct OpenOptions {}
pub struct FilePermissions(Void);
pub struct FilePermissions(!);
pub struct FileType(Void);
pub struct FileType(!);
#[derive(Debug)]
pub struct DirBuilder {}
impl FileAttr {
pub fn size(&self) -> u64 {
match self.0 {}
self.0
}
pub fn perm(&self) -> FilePermissions {
match self.0 {}
self.0
}
pub fn file_type(&self) -> FileType {
match self.0 {}
self.0
}
pub fn modified(&self) -> io::Result<SystemTime> {
match self.0 {}
self.0
}
pub fn accessed(&self) -> io::Result<SystemTime> {
match self.0 {}
self.0
}
pub fn created(&self) -> io::Result<SystemTime> {
match self.0 {}
self.0
}
}
impl Clone for FileAttr {
fn clone(&self) -> FileAttr {
match self.0 {}
self.0
}
}
impl FilePermissions {
pub fn readonly(&self) -> bool {
match self.0 {}
self.0
}
pub fn set_readonly(&mut self, _readonly: bool) {
match self.0 {}
self.0
}
}
impl Clone for FilePermissions {
fn clone(&self) -> FilePermissions {
match self.0 {}
self.0
}
}
impl PartialEq for FilePermissions {
fn eq(&self, _other: &FilePermissions) -> bool {
match self.0 {}
self.0
}
}
@ -82,27 +82,27 @@ impl Eq for FilePermissions {}
impl fmt::Debug for FilePermissions {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
impl FileType {
pub fn is_dir(&self) -> bool {
match self.0 {}
self.0
}
pub fn is_file(&self) -> bool {
match self.0 {}
self.0
}
pub fn is_symlink(&self) -> bool {
match self.0 {}
self.0
}
}
impl Clone for FileType {
fn clone(&self) -> FileType {
match self.0 {}
self.0
}
}
@ -110,7 +110,7 @@ impl Copy for FileType {}
impl PartialEq for FileType {
fn eq(&self, _other: &FileType) -> bool {
match self.0 {}
self.0
}
}
@ -118,19 +118,19 @@ impl Eq for FileType {}
impl Hash for FileType {
fn hash<H: Hasher>(&self, _h: &mut H) {
match self.0 {}
self.0
}
}
impl fmt::Debug for FileType {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
impl fmt::Debug for ReadDir {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
@ -138,25 +138,25 @@ impl Iterator for ReadDir {
type Item = io::Result<DirEntry>;
fn next(&mut self) -> Option<io::Result<DirEntry>> {
match self.0 {}
self.0
}
}
impl DirEntry {
pub fn path(&self) -> PathBuf {
match self.0 {}
self.0
}
pub fn file_name(&self) -> OsString {
match self.0 {}
self.0
}
pub fn metadata(&self) -> io::Result<FileAttr> {
match self.0 {}
self.0
}
pub fn file_type(&self) -> io::Result<FileType> {
match self.0 {}
self.0
}
}
@ -179,59 +179,59 @@ impl File {
}
pub fn file_attr(&self) -> io::Result<FileAttr> {
match self.0 {}
self.0
}
pub fn fsync(&self) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn datasync(&self) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn truncate(&self, _size: u64) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn read(&self, _buf: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn read_vectored(&self, _bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn is_read_vectored(&self) -> bool {
match self.0 {}
self.0
}
pub fn write(&self, _buf: &[u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn write_vectored(&self, _bufs: &[IoSlice<'_>]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn is_write_vectored(&self) -> bool {
match self.0 {}
self.0
}
pub fn flush(&self) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn seek(&self, _pos: SeekFrom) -> io::Result<u64> {
match self.0 {}
self.0
}
pub fn duplicate(&self) -> io::Result<File> {
match self.0 {}
self.0
}
pub fn set_permissions(&self, _perm: FilePermissions) -> io::Result<()> {
match self.0 {}
self.0
}
}
@ -247,7 +247,7 @@ impl DirBuilder {
impl fmt::Debug for File {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}

View file

@ -2,10 +2,10 @@ use crate::convert::TryFrom;
use crate::fmt;
use crate::io::{self, IoSlice, IoSliceMut};
use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr};
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::time::Duration;
pub struct TcpStream(Void);
pub struct TcpStream(!);
impl TcpStream {
pub fn connect(_: io::Result<&SocketAddr>) -> io::Result<TcpStream> {
@ -17,97 +17,97 @@ impl TcpStream {
}
pub fn set_read_timeout(&self, _: Option<Duration>) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn set_write_timeout(&self, _: Option<Duration>) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn read_timeout(&self) -> io::Result<Option<Duration>> {
match self.0 {}
self.0
}
pub fn write_timeout(&self) -> io::Result<Option<Duration>> {
match self.0 {}
self.0
}
pub fn peek(&self, _: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn read(&self, _: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn read_vectored(&self, _: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn is_read_vectored(&self) -> bool {
match self.0 {}
self.0
}
pub fn write(&self, _: &[u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn write_vectored(&self, _: &[IoSlice<'_>]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn is_write_vectored(&self) -> bool {
match self.0 {}
self.0
}
pub fn peer_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn socket_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn shutdown(&self, _: Shutdown) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn duplicate(&self) -> io::Result<TcpStream> {
match self.0 {}
self.0
}
pub fn set_nodelay(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn nodelay(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn set_ttl(&self, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn ttl(&self) -> io::Result<u32> {
match self.0 {}
self.0
}
pub fn take_error(&self) -> io::Result<Option<io::Error>> {
match self.0 {}
self.0
}
pub fn set_nonblocking(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
}
impl fmt::Debug for TcpStream {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
pub struct TcpListener(Void);
pub struct TcpListener(!);
impl TcpListener {
pub fn bind(_: io::Result<&SocketAddr>) -> io::Result<TcpListener> {
@ -115,49 +115,49 @@ impl TcpListener {
}
pub fn socket_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn accept(&self) -> io::Result<(TcpStream, SocketAddr)> {
match self.0 {}
self.0
}
pub fn duplicate(&self) -> io::Result<TcpListener> {
match self.0 {}
self.0
}
pub fn set_ttl(&self, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn ttl(&self) -> io::Result<u32> {
match self.0 {}
self.0
}
pub fn set_only_v6(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn only_v6(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn take_error(&self) -> io::Result<Option<io::Error>> {
match self.0 {}
self.0
}
pub fn set_nonblocking(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
}
impl fmt::Debug for TcpListener {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
pub struct UdpSocket(Void);
pub struct UdpSocket(!);
impl UdpSocket {
pub fn bind(_: io::Result<&SocketAddr>) -> io::Result<UdpSocket> {
@ -165,144 +165,144 @@ impl UdpSocket {
}
pub fn peer_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn socket_addr(&self) -> io::Result<SocketAddr> {
match self.0 {}
self.0
}
pub fn recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> {
match self.0 {}
self.0
}
pub fn peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> {
match self.0 {}
self.0
}
pub fn send_to(&self, _: &[u8], _: &SocketAddr) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn duplicate(&self) -> io::Result<UdpSocket> {
match self.0 {}
self.0
}
pub fn set_read_timeout(&self, _: Option<Duration>) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn set_write_timeout(&self, _: Option<Duration>) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn read_timeout(&self) -> io::Result<Option<Duration>> {
match self.0 {}
self.0
}
pub fn write_timeout(&self) -> io::Result<Option<Duration>> {
match self.0 {}
self.0
}
pub fn set_broadcast(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn broadcast(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn set_multicast_loop_v4(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn multicast_loop_v4(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn set_multicast_ttl_v4(&self, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn multicast_ttl_v4(&self) -> io::Result<u32> {
match self.0 {}
self.0
}
pub fn set_multicast_loop_v6(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn multicast_loop_v6(&self) -> io::Result<bool> {
match self.0 {}
self.0
}
pub fn join_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn join_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn leave_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn leave_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn set_ttl(&self, _: u32) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn ttl(&self) -> io::Result<u32> {
match self.0 {}
self.0
}
pub fn take_error(&self) -> io::Result<Option<io::Error>> {
match self.0 {}
self.0
}
pub fn set_nonblocking(&self, _: bool) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn recv(&self, _: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn peek(&self, _: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn send(&self, _: &[u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn connect(&self, _: io::Result<&SocketAddr>) -> io::Result<()> {
match self.0 {}
self.0
}
}
impl fmt::Debug for UdpSocket {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
pub struct LookupHost(Void);
pub struct LookupHost(!);
impl LookupHost {
pub fn port(&self) -> u16 {
match self.0 {}
self.0
}
}
impl Iterator for LookupHost {
type Item = SocketAddr;
fn next(&mut self) -> Option<SocketAddr> {
match self.0 {}
self.0
}
}

View file

@ -1,8 +1,9 @@
use super::{unsupported, Void};
use super::unsupported;
use crate::error::Error as StdError;
use crate::ffi::{OsStr, OsString};
use crate::fmt;
use crate::io;
use crate::marker::PhantomData;
use crate::path::{self, PathBuf};
pub fn errno() -> i32 {
@ -21,7 +22,7 @@ pub fn chdir(_: &path::Path) -> io::Result<()> {
unsupported()
}
pub struct SplitPaths<'a>(&'a Void);
pub struct SplitPaths<'a>(!, PhantomData<&'a ()>);
pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
panic!("unsupported")
@ -30,7 +31,7 @@ pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
impl<'a> Iterator for SplitPaths<'a> {
type Item = PathBuf;
fn next(&mut self) -> Option<PathBuf> {
match *self.0 {}
self.0
}
}
@ -62,12 +63,12 @@ pub fn current_exe() -> io::Result<PathBuf> {
unsupported()
}
pub struct Env(Void);
pub struct Env(!);
impl Iterator for Env {
type Item = (OsString, OsString);
fn next(&mut self) -> Option<(OsString, OsString)> {
match self.0 {}
self.0
}
}

View file

@ -1,35 +1,34 @@
use crate::io::{self, IoSlice, IoSliceMut};
use crate::sys::Void;
pub struct AnonPipe(Void);
pub struct AnonPipe(!);
impl AnonPipe {
pub fn read(&self, _buf: &mut [u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn read_vectored(&self, _bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn is_read_vectored(&self) -> bool {
match self.0 {}
self.0
}
pub fn write(&self, _buf: &[u8]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn write_vectored(&self, _bufs: &[IoSlice<'_>]) -> io::Result<usize> {
match self.0 {}
self.0
}
pub fn is_write_vectored(&self) -> bool {
match self.0 {}
self.0
}
pub fn diverge(&self) -> ! {
match self.0 {}
self.0
}
}

View file

@ -5,7 +5,7 @@ use crate::marker::PhantomData;
use crate::path::Path;
use crate::sys::fs::File;
use crate::sys::pipe::AnonPipe;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::sys_common::process::{CommandEnv, CommandEnvs};
pub use crate::ffi::OsString as EnvKey;
@ -94,21 +94,21 @@ impl fmt::Debug for Command {
}
}
pub struct ExitStatus(Void);
pub struct ExitStatus(!);
impl ExitStatus {
pub fn success(&self) -> bool {
match self.0 {}
self.0
}
pub fn code(&self) -> Option<i32> {
match self.0 {}
self.0
}
}
impl Clone for ExitStatus {
fn clone(&self) -> ExitStatus {
match self.0 {}
self.0
}
}
@ -116,7 +116,7 @@ impl Copy for ExitStatus {}
impl PartialEq for ExitStatus {
fn eq(&self, _other: &ExitStatus) -> bool {
match self.0 {}
self.0
}
}
@ -124,13 +124,13 @@ impl Eq for ExitStatus {}
impl fmt::Debug for ExitStatus {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
impl fmt::Display for ExitStatus {
fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {}
self.0
}
}
@ -146,23 +146,23 @@ impl ExitCode {
}
}
pub struct Process(Void);
pub struct Process(!);
impl Process {
pub fn id(&self) -> u32 {
match self.0 {}
self.0
}
pub fn kill(&mut self) -> io::Result<()> {
match self.0 {}
self.0
}
pub fn wait(&mut self) -> io::Result<ExitStatus> {
match self.0 {}
self.0
}
pub fn try_wait(&mut self) -> io::Result<Option<ExitStatus>> {
match self.0 {}
self.0
}
}

View file

@ -1,9 +1,9 @@
use super::{unsupported, Void};
use super::unsupported;
use crate::ffi::CStr;
use crate::io;
use crate::time::Duration;
pub struct Thread(Void);
pub struct Thread(!);
pub const DEFAULT_MIN_STACK_SIZE: usize = 4096;
@ -26,7 +26,7 @@ impl Thread {
}
pub fn join(self) {
match self.0 {}
self.0
}
}

View file

@ -5,7 +5,7 @@ use crate::convert::TryFrom;
use crate::fmt;
use crate::io::{self, IoSlice, IoSliceMut};
use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr};
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::sys_common::FromInner;
use crate::time::Duration;
@ -343,18 +343,18 @@ impl fmt::Debug for UdpSocket {
}
}
pub struct LookupHost(Void);
pub struct LookupHost(!);
impl LookupHost {
pub fn port(&self) -> u16 {
match self.0 {}
self.0
}
}
impl Iterator for LookupHost {
type Item = SocketAddr;
fn next(&mut self) -> Option<SocketAddr> {
match self.0 {}
self.0
}
}

View file

@ -10,7 +10,7 @@ use crate::os::wasi::prelude::*;
use crate::path::{self, PathBuf};
use crate::str;
use crate::sys::memchr;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::vec;
// Add a few symbols not in upstream `libc` just yet.
@ -87,7 +87,7 @@ pub fn chdir(p: &path::Path) -> io::Result<()> {
}
}
pub struct SplitPaths<'a>(&'a Void);
pub struct SplitPaths<'a>(!, PhantomData<&'a ()>);
pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
panic!("unsupported")
@ -96,7 +96,7 @@ pub fn split_paths(_unparsed: &OsStr) -> SplitPaths<'_> {
impl<'a> Iterator for SplitPaths<'a> {
type Item = PathBuf;
fn next(&mut self) -> Option<PathBuf> {
match *self.0 {}
self.0
}
}

View file

@ -3,10 +3,10 @@
use crate::ffi::CStr;
use crate::io;
use crate::mem;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::time::Duration;
pub struct Thread(Void);
pub struct Thread(!);
pub const DEFAULT_MIN_STACK_SIZE: usize = 4096;
@ -59,7 +59,7 @@ impl Thread {
}
pub fn join(self) {
match self.0 {}
self.0
}
}

View file

@ -1,9 +1,9 @@
use crate::ffi::CStr;
use crate::io;
use crate::sys::{unsupported, Void};
use crate::sys::unsupported;
use crate::time::Duration;
pub struct Thread(Void);
pub struct Thread(!);
pub const DEFAULT_MIN_STACK_SIZE: usize = 4096;
@ -47,7 +47,7 @@ impl Thread {
}
pub fn join(self) {
match self.0 {}
self.0
}
}