diff --git a/Cargo.lock b/Cargo.lock index ea47234b369..ec2d62f7fc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7164,7 +7164,6 @@ name = "yggdrasil-abi" version = "0.1.0" dependencies = [ "compiler_builtins", - "rustc-std-workspace-alloc", "rustc-std-workspace-core", ] diff --git a/library/std/src/sys/yggdrasil/fs/dir.rs b/library/std/src/sys/yggdrasil/fs/dir.rs index 0541981c21f..7d0028030f5 100644 --- a/library/std/src/sys/yggdrasil/fs/dir.rs +++ b/library/std/src/sys/yggdrasil/fs/dir.rs @@ -81,7 +81,7 @@ impl Iterator for ReadDir { let entry = self.buffer.take(); break if let Some(entry) = entry { - if &entry.name[..2] == b".\0" || &entry.name[..3] == b"..\0" { + if entry.name == "." || entry.name == ".." { continue; } @@ -101,10 +101,7 @@ impl fmt::Debug for ReadDir { impl DirEntry { fn from_raw(parent: PathBuf, raw: &OsDirectoryEntry) -> Self { - // TODO this is ugly - let name_nul = raw.name.iter().position(|&x| x == 0).unwrap(); - let name_str = crate::str::from_utf8(&raw.name[..name_nul]).unwrap(); - let filename = OsString::from_str(name_str).unwrap(); + let filename = OsString::from_str(raw.name.as_ref()).unwrap(); Self { path: parent.join(filename.clone()), filename, ty: FileType(raw.ty) } } @@ -144,12 +141,10 @@ pub fn readdir(path: &Path) -> io::Result { pub fn rmdir(path: &Path) -> io::Result<()> { run_with_path_str(path, |path_str| { - cvt_io(unsafe { yggdrasil_rt::sys::remove(None, path_str, false) }) + cvt_io(unsafe { yggdrasil_rt::sys::remove_directory(None, path_str) }) }) } pub fn remove_dir_all(path: &Path) -> io::Result<()> { - run_with_path_str(path, |path_str| { - cvt_io(unsafe { yggdrasil_rt::sys::remove(None, path_str, true) }) - }) + todo!() } diff --git a/library/std/src/sys/yggdrasil/fs/mod.rs b/library/std/src/sys/yggdrasil/fs/mod.rs index 99530cbde4c..b976c6094b4 100644 --- a/library/std/src/sys/yggdrasil/fs/mod.rs +++ b/library/std/src/sys/yggdrasil/fs/mod.rs @@ -124,9 +124,7 @@ pub(self) fn get_metadata_inner( } pub fn unlink(path: &Path) -> io::Result<()> { - run_with_path_str(path, |path_str| { - cvt_io(unsafe { yggdrasil_rt::sys::remove(None, path_str, false) }) - }) + run_with_path_str(path, |path_str| cvt_io(unsafe { yggdrasil_rt::sys::remove(None, path_str) })) } pub fn rename(_old: &Path, _new: &Path) -> io::Result<()> { diff --git a/library/std/src/sys/yggdrasil/mod.rs b/library/std/src/sys/yggdrasil/mod.rs index de107ad4d37..53129da11a4 100644 --- a/library/std/src/sys/yggdrasil/mod.rs +++ b/library/std/src/sys/yggdrasil/mod.rs @@ -115,12 +115,17 @@ where } pub fn hashmap_random_keys() -> (u64, u64) { + const KEY_LEN: usize = core::mem::size_of::(); + + let mut v = [0u8; KEY_LEN * 2]; unsafe { - yggdrasil_rt::sys::debug_trace("sys::yggdrasil::hashmap_random_keys()"); + yggdrasil_rt::sys::get_random(&mut v); } - // Bruh - (1234, 4321) + let key1 = v[0..KEY_LEN].try_into().unwrap(); + let key2 = v[KEY_LEN..].try_into().unwrap(); + + (u64::from_ne_bytes(key1), u64::from_ne_bytes(key2)) } pub fn abort_internal() -> ! { @@ -150,12 +155,14 @@ pub fn decode_error_kind(errno: i32) -> ErrorKind { Ok(OsError::DirectoryNotEmpty) => ErrorKind::DirectoryNotEmpty, Ok(OsError::Interrupted) => ErrorKind::Interrupted, Ok(OsError::WouldBlock) => ErrorKind::WouldBlock, + Ok(OsError::ReadOnly) => ErrorKind::ReadOnlyFilesystem, + Ok(OsError::PermissionDenied) => ErrorKind::PermissionDenied, // Memory and general Ok(OsError::OutOfMemory) => ErrorKind::OutOfMemory, - Ok(OsError::InvalidArgument) | Ok(OsError::InvalidMemoryOperation) => { - ErrorKind::InvalidInput - } + Ok(OsError::InvalidArgument) + | Ok(OsError::InvalidMemoryOperation) + | Ok(OsError::InvalidOperation) => ErrorKind::InvalidInput, Ok(OsError::NotImplemented) => ErrorKind::Unsupported, // Uncategorized @@ -199,5 +206,5 @@ pub unsafe extern "C" fn runtime_entry(program_arg: usize) -> ! { let result = main(0, null()); - yggdrasil_rt::sys::exit(OsExitCode::Exited(result)); + yggdrasil_rt::sys::exit_process(OsExitCode::Exited(result)); } diff --git a/library/std/src/sys/yggdrasil/path.rs b/library/std/src/sys/yggdrasil/path.rs index 1d7662bdcdd..3a811ec3ab3 100644 --- a/library/std/src/sys/yggdrasil/path.rs +++ b/library/std/src/sys/yggdrasil/path.rs @@ -6,12 +6,12 @@ use yggdrasil_rt::path as rt_path; #[inline] pub fn is_sep_byte(b: u8) -> bool { - b == (rt_path::SEPARATOR as u8) + b == (rt_path::Path::SEPARATOR as u8) } #[inline] pub fn is_verbatim_sep(b: u8) -> bool { - b == (rt_path::SEPARATOR as u8) + b == (rt_path::Path::SEPARATOR as u8) } #[inline] @@ -19,8 +19,8 @@ pub fn parse_prefix(_: &OsStr) -> Option> { None } -pub const MAIN_SEP_STR: &str = rt_path::SEPARATOR_STR; -pub const MAIN_SEP: char = rt_path::SEPARATOR; +pub const MAIN_SEP_STR: &str = rt_path::Path::SEPARATOR_STR; +pub const MAIN_SEP: char = rt_path::Path::SEPARATOR; pub(crate) fn absolute(path: &Path) -> io::Result { let mut components = path.strip_prefix(".").unwrap_or(path).components(); diff --git a/library/std/src/sys/yggdrasil/signal.rs b/library/std/src/sys/yggdrasil/signal.rs index e5495712444..47ae62519d3 100644 --- a/library/std/src/sys/yggdrasil/signal.rs +++ b/library/std/src/sys/yggdrasil/signal.rs @@ -70,7 +70,7 @@ unsafe extern "C" fn signal_entry(data: &SignalEntryData) -> ! { } SignalHandler::Terminate => { eprintln!("#{}: {:?}", pid, data.signal); - sys::exit(OsExitCode::BySignal(data.signal)); + sys::exit_process(OsExitCode::BySignal(data.signal)); } } } diff --git a/library/std/src/sys/yggdrasil/thread.rs b/library/std/src/sys/yggdrasil/thread.rs index d9674030f57..c5d9c3b15ab 100644 --- a/library/std/src/sys/yggdrasil/thread.rs +++ b/library/std/src/sys/yggdrasil/thread.rs @@ -63,7 +63,7 @@ impl Thread { p(); debug_trace!("Thread finish"); - sys::exit(ExitCode::Exited(0)); + sys::exit_thread(ExitCode::Exited(0)); } } }