diff --git a/src/header/netdb/host.rs b/src/header/netdb/host.rs index e22a4ec6be8d02c2fef53e6f9a0cbfa89b6b6c59..1b4ba101632ea849513f94c85f4fdbe6258fcf9e 100644 --- a/src/header/netdb/host.rs +++ b/src/header/netdb/host.rs @@ -80,8 +80,9 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent { let mut addr_vec = iter.next().unwrap().as_bytes().to_vec(); addr_vec.push(b'\0'); let addr_cstr = addr_vec.as_slice().as_ptr() as *const i8; - let mut addr = mem::uninitialized(); - inet_aton(addr_cstr, &mut addr); + let mut addr = mem::MaybeUninit::uninit(); + inet_aton(addr_cstr, addr.as_mut_ptr()); + let addr = addr.assume_init(); _HOST_ADDR_LIST = mem::transmute::<u32, [u8; 4]>(addr.s_addr); HOST_ADDR_LIST = [_HOST_ADDR_LIST.as_mut_ptr() as *mut c_char, ptr::null_mut()]; diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs index bf36e6d9af6c1609f1ace4c5fa47926318561234..c786832699f135b6fd9e1c057aa4006f4ae4434e 100644 --- a/src/header/signal/mod.rs +++ b/src/header/signal/mod.rs @@ -21,9 +21,9 @@ pub mod sys; type SigSet = BitSet<[c_ulong; 1]>; -pub(crate) const SIG_DFL: usize = 0; -pub(crate) const SIG_IGN: usize = 1; -pub(crate) const SIG_ERR: isize = -1; +pub const SIG_DFL: usize = 0; +pub const SIG_IGN: usize = 1; +pub const SIG_ERR: isize = -1; pub const SIG_BLOCK: c_int = 0; pub const SIG_UNBLOCK: c_int = 1; @@ -202,12 +202,12 @@ pub extern "C" fn signal( sa_restorer: Some(__restore_rt), sa_mask: sigset_t::default(), }; - let mut old_sa = unsafe { mem::uninitialized() }; - if unsafe { sigaction(sig, &sa, &mut old_sa) } < 0 { + let mut old_sa = mem::MaybeUninit::uninit(); + if unsafe { sigaction(sig, &sa, old_sa.as_mut_ptr()) } < 0 { mem::forget(old_sa); return unsafe { mem::transmute(SIG_ERR) }; } - old_sa.sa_handler + unsafe { old_sa.assume_init() }.sa_handler } // #[no_mangle] diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index 85e53e46024246f9626effc485c18d05f3dc5a62..484127dccddae5399b2c076323e94994f6ad1540 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -17,7 +17,7 @@ use crate::{ fcntl::*, limits, string::*, - time::{constants::CLOCK_MONOTONIC, timespec}, + time::constants::CLOCK_MONOTONIC, unistd::{self, sysconf, _SC_PAGESIZE}, wchar::*, }, @@ -589,9 +589,9 @@ pub unsafe extern "C" fn mktemp(name: *mut c_char) -> *mut c_char { } fn get_nstime() -> u64 { - let mut ts: timespec = unsafe { mem::uninitialized() }; - Sys::clock_gettime(CLOCK_MONOTONIC, &mut ts); - ts.tv_nsec as u64 + let mut ts = mem::MaybeUninit::uninit(); + Sys::clock_gettime(CLOCK_MONOTONIC, ts.as_mut_ptr()); + unsafe { ts.assume_init() }.tv_nsec as u64 } #[no_mangle] diff --git a/src/header/stdlib/sort.rs b/src/header/stdlib/sort.rs index 60506d6d7c3c4a1525f44bbcbaf2d372febd774a..5a0cd5faf9ce46bbf1d2e5fa8f34b4733c162af3 100644 --- a/src/header/stdlib/sort.rs +++ b/src/header/stdlib/sort.rs @@ -224,16 +224,15 @@ fn swap(mut ptr1: *mut c_char, mut ptr2: *mut c_char, mut width: size_t) { const BUFSIZE: usize = 128; - let mut buffer: [c_char; BUFSIZE] = unsafe { mem::uninitialized() }; + let mut buffer = mem::MaybeUninit::<[c_char; BUFSIZE]>::uninit(); while width > 0 { let copy_size = BUFSIZE.min(width as usize); + let buf = buffer.as_mut_ptr() as *mut c_char; unsafe { - buffer - .as_mut_ptr() - .copy_from_nonoverlapping(ptr1, copy_size); + buf.copy_from_nonoverlapping(ptr1, copy_size); ptr1.copy_from_nonoverlapping(ptr2, copy_size); - ptr2.copy_from_nonoverlapping(buffer.as_ptr(), copy_size); + ptr2.copy_from_nonoverlapping(buf, copy_size); ptr1 = ptr1.add(copy_size); ptr2 = ptr2.add(copy_size); diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs index 1d7b5a18a3508680e2d74e00b766b36d97dae9d8..087aa090fec7fdf9de9f393f1bef446520d3a54c 100644 --- a/src/header/time/mod.rs +++ b/src/header/time/mod.rs @@ -102,11 +102,12 @@ pub unsafe extern "C" fn asctime_r(tm: *const tm, buf: *mut c_char) -> *mut c_ch #[no_mangle] pub extern "C" fn clock() -> clock_t { - let mut ts: timespec = unsafe { core::mem::uninitialized() }; + let mut ts = core::mem::MaybeUninit::<timespec>::uninit(); - if clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &mut ts) != 0 { + if clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ts.as_mut_ptr()) != 0 { return -1; } + let ts = unsafe { ts.assume_init() }; if ts.tv_sec > time_t::max_value() / CLOCKS_PER_SEC || ts.tv_nsec / (1_000_000_000 / CLOCKS_PER_SEC) diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index b64997d0b0eb2787e42e102d05b434ca6d183249..f417e5bb8bea721d2a0ebfcae8838fc6cdacae9c 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -4,7 +4,9 @@ use core::{convert::TryFrom, mem, ptr, slice}; use crate::{ c_str::CStr, - header::{errno, limits, stdlib::getenv, sys_ioctl, sys_time, termios, time::timespec}, + header::{ + errno, limits, stdlib::getenv, sys_ioctl, sys_time, sys_utsname, termios, time::timespec, + }, platform::{self, types::*, Pal, Sys}, }; use alloc::collections::LinkedList; @@ -309,13 +311,13 @@ pub extern "C" fn gethostid() -> c_long { #[no_mangle] pub unsafe extern "C" fn gethostname(mut name: *mut c_char, mut len: size_t) -> c_int { - let mut uts = mem::uninitialized(); - let err = Sys::uname(&mut uts); + let mut uts = mem::MaybeUninit::<sys_utsname::utsname>::uninit(); + let err = Sys::uname(uts.as_mut_ptr()); if err < 0 { mem::forget(uts); return err; } - for c in uts.nodename.iter() { + for c in uts.assume_init().nodename.iter() { if len == 0 { break; }