Skip to content

Commit

Permalink
std: get rid of sys_common::io
Browse files Browse the repository at this point in the history
  • Loading branch information
joboet committed Jan 18, 2025
1 parent e149731 commit f634d2d
Show file tree
Hide file tree
Showing 17 changed files with 84 additions and 88 deletions.
2 changes: 1 addition & 1 deletion library/std/src/fs/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use crate::os::unix::fs::symlink as junction_point;
use crate::os::windows::fs::{OpenOptionsExt, junction_point, symlink_dir, symlink_file};
use crate::path::Path;
use crate::sync::Arc;
use crate::sys_common::io::test::{TempDir, tmpdir};
use crate::test_helpers::{TempDir, tmpdir};
use crate::time::{Duration, Instant, SystemTime};
use crate::{env, str, thread};

Expand Down
2 changes: 1 addition & 1 deletion library/std/src/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ pub mod prelude;
mod stdio;
mod util;

const DEFAULT_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
const DEFAULT_BUF_SIZE: usize = crate::sys::io::DEFAULT_BUF_SIZE;

pub(crate) use stdio::cleanup;

Expand Down
25 changes: 1 addition & 24 deletions library/std/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -736,27 +736,4 @@ mod sealed {

#[cfg(test)]
#[allow(dead_code)] // Not used in all configurations.
pub(crate) mod test_helpers {
/// Test-only replacement for `rand::thread_rng()`, which is unusable for
/// us, as we want to allow running stdlib tests on tier-3 targets which may
/// not have `getrandom` support.
///
/// Does a bit of a song and dance to ensure that the seed is different on
/// each call (as some tests sadly rely on this), but doesn't try that hard.
///
/// This is duplicated in the `core`, `alloc` test suites (as well as
/// `std`'s integration tests), but figuring out a mechanism to share these
/// seems far more painful than copy-pasting a 7 line function a couple
/// times, given that even under a perma-unstable feature, I don't think we
/// want to expose types from `rand` from `std`.
#[track_caller]
pub(crate) fn test_rng() -> rand_xorshift::XorShiftRng {
use core::hash::{BuildHasher, Hash, Hasher};
let mut hasher = crate::hash::RandomState::new().build_hasher();
core::panic::Location::caller().hash(&mut hasher);
let hc64 = hasher.finish();
let seed_vec = hc64.to_le_bytes().into_iter().chain(0u8..8).collect::<Vec<u8>>();
let seed: [u8; 16] = seed_vec.as_slice().try_into().unwrap();
rand::SeedableRng::from_seed(seed)
}
}
pub(crate) mod test_helpers;
4 changes: 2 additions & 2 deletions library/std/src/os/unix/fs/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use super::*;
#[test]
fn read_vectored_at() {
let msg = b"preadv is working!";
let dir = crate::sys_common::io::test::tmpdir();
let dir = crate::test_helpers::tmpdir();

let filename = dir.join("preadv.txt");
{
Expand Down Expand Up @@ -31,7 +31,7 @@ fn read_vectored_at() {
#[test]
fn write_vectored_at() {
let msg = b"pwritev is not working!";
let dir = crate::sys_common::io::test::tmpdir();
let dir = crate::test_helpers::tmpdir();

let filename = dir.join("preadv.txt");
{
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/os/unix/net/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::os::android::net::{SocketAddrExt, UnixSocketExt};
use crate::os::linux::net::{SocketAddrExt, UnixSocketExt};
#[cfg(any(target_os = "android", target_os = "linux"))]
use crate::os::unix::io::AsRawFd;
use crate::sys_common::io::test::tmpdir;
use crate::test_helpers::tmpdir;
use crate::thread;
use crate::time::Duration;

Expand Down
4 changes: 2 additions & 2 deletions library/std/src/process/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,7 @@ fn debug_print() {
#[test]
#[cfg(windows)]
fn run_bat_script() {
let tempdir = crate::sys_common::io::test::tmpdir();
let tempdir = crate::test_helpers::tmpdir();
let script_path = tempdir.join("hello.cmd");

crate::fs::write(&script_path, "@echo Hello, %~1!").unwrap();
Expand All @@ -707,7 +707,7 @@ fn run_bat_script() {
#[test]
#[cfg(windows)]
fn run_canonical_bat_script() {
let tempdir = crate::sys_common::io::test::tmpdir();
let tempdir = crate::test_helpers::tmpdir();
let script_path = tempdir.join("hello.cmd");

crate::fs::write(&script_path, "@echo Hello, %~1!").unwrap();
Expand Down
4 changes: 4 additions & 0 deletions library/std/src/sys/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,7 @@ mod is_terminal {

pub use io_slice::{IoSlice, IoSliceMut};
pub use is_terminal::is_terminal;

// Bare metal platforms usually have very small amounts of RAM
// (in the order of hundreds of KB)
pub const DEFAULT_BUF_SIZE: usize = if cfg!(target_os = "espidf") { 512 } else { 8 * 1024 };
2 changes: 1 addition & 1 deletion library/std/src/sys/pal/sgx/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ impl io::Write for Stderr {
}
}

pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
pub const STDIN_BUF_SIZE: usize = crate::sys::io::DEFAULT_BUF_SIZE;

pub fn is_ebadf(err: &io::Error) -> bool {
// FIXME: Rust normally maps Unix EBADF to `Uncategorized`
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/sys/pal/unix/kernel_copy/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::fs::OpenOptions;
use crate::io;
use crate::io::{BufRead, Read, Result, Seek, SeekFrom, Write};
use crate::os::unix::io::AsRawFd;
use crate::sys_common::io::test::tmpdir;
use crate::test_helpers::tmpdir;

#[test]
fn copy_specialization() -> Result<()> {
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/sys/pal/unix/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ pub fn is_ebadf(err: &io::Error) -> bool {
err.raw_os_error() == Some(libc::EBADF as i32)
}

pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
pub const STDIN_BUF_SIZE: usize = crate::sys::io::DEFAULT_BUF_SIZE;

pub fn panic_output() -> Option<impl io::Write> {
Some(Stderr::new())
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/sys/pal/wasi/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ impl io::Write for Stderr {
}
}

pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
pub const STDIN_BUF_SIZE: usize = crate::sys::io::DEFAULT_BUF_SIZE;

pub fn is_ebadf(err: &io::Error) -> bool {
err.raw_os_error() == Some(wasi::ERRNO_BADF.raw().into())
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/sys/pal/windows/process/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ fn windows_exe_resolver() {
use super::resolve_exe;
use crate::io;
use crate::sys::fs::symlink;
use crate::sys_common::io::test::tmpdir;
use crate::test_helpers::tmpdir;

let env_paths = || env::var_os("PATH");

Expand Down
2 changes: 1 addition & 1 deletion library/std/src/sys/pal/zkvm/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ impl io::Write for Stderr {
}
}

pub const STDIN_BUF_SIZE: usize = crate::sys_common::io::DEFAULT_BUF_SIZE;
pub const STDIN_BUF_SIZE: usize = crate::sys::io::DEFAULT_BUF_SIZE;

pub fn is_ebadf(_err: &io::Error) -> bool {
true
Expand Down
49 changes: 0 additions & 49 deletions library/std/src/sys_common/io.rs

This file was deleted.

1 change: 0 additions & 1 deletion library/std/src/sys_common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
mod tests;

pub mod fs;
pub mod io;
pub mod process;
pub mod wstr;
pub mod wtf8;
Expand Down
65 changes: 65 additions & 0 deletions library/std/src/test_helpers.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
use rand::{RngCore, SeedableRng};

use crate::hash::{BuildHasher, Hash, Hasher, RandomState};
use crate::panic::Location;
use crate::path::{Path, PathBuf};
use crate::{env, fs, thread};

/// Test-only replacement for `rand::thread_rng()`, which is unusable for
/// us, as we want to allow running stdlib tests on tier-3 targets which may
/// not have `getrandom` support.
///
/// Does a bit of a song and dance to ensure that the seed is different on
/// each call (as some tests sadly rely on this), but doesn't try that hard.
///
/// This is duplicated in the `core`, `alloc` test suites (as well as
/// `std`'s integration tests), but figuring out a mechanism to share these
/// seems far more painful than copy-pasting a 7 line function a couple
/// times, given that even under a perma-unstable feature, I don't think we
/// want to expose types from `rand` from `std`.
#[track_caller]
pub(crate) fn test_rng() -> rand_xorshift::XorShiftRng {
let mut hasher = RandomState::new().build_hasher();
Location::caller().hash(&mut hasher);
let hc64 = hasher.finish();
let seed_vec = hc64.to_le_bytes().into_iter().chain(0u8..8).collect::<Vec<u8>>();
let seed: [u8; 16] = seed_vec.as_slice().try_into().unwrap();
SeedableRng::from_seed(seed)
}

pub struct TempDir(PathBuf);

impl TempDir {
pub fn join(&self, path: &str) -> PathBuf {
let TempDir(ref p) = *self;
p.join(path)
}

pub fn path(&self) -> &Path {
let TempDir(ref p) = *self;
p
}
}

impl Drop for TempDir {
fn drop(&mut self) {
// Gee, seeing how we're testing the fs module I sure hope that we
// at least implement this correctly!
let TempDir(ref p) = *self;
let result = fs::remove_dir_all(p);
// Avoid panicking while panicking as this causes the process to
// immediately abort, without displaying test results.
if !thread::panicking() {
result.unwrap();
}
}
}

#[track_caller] // for `test_rng`
pub fn tmpdir() -> TempDir {
let p = env::temp_dir();
let mut r = test_rng();
let ret = p.join(&format!("rust-{}", r.next_u32()));
fs::create_dir(&ret).unwrap();
TempDir(ret)
}
2 changes: 1 addition & 1 deletion library/std/tests/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ pub(crate) fn test_rng() -> rand_xorshift::XorShiftRng {
rand::SeedableRng::from_seed(seed)
}

// Copied from std::sys_common::io
// Copied from std::test_helpers
pub(crate) struct TempDir(PathBuf);

impl TempDir {
Expand Down

0 comments on commit f634d2d

Please sign in to comment.