Replace static mut in seed48()

This commit is contained in:
Peter Limkilde Svendsen
2026-04-11 16:07:48 +02:00
parent a820dd4d25
commit f28cb80507
+8 -3
View File
@@ -1248,19 +1248,24 @@ pub unsafe extern "C" fn secure_getenv(name: *const c_char) -> *mut c_char {
/// state.
#[unsafe(no_mangle)]
pub unsafe extern "C" fn seed48(seed16v: *mut c_ushort) -> *mut c_ushort {
static mut BUFFER: [c_ushort; 3] = [0; 3];
static RETURN_BUFFER: RawCell<[c_ushort; 3]> = RawCell::new([0; 3]);
let mut params = rand48::params_mut();
let mut xsubi = rand48::xsubi_lock();
// SAFETY: the caller is required to ensure seed16v is convertible to
// &[c_ushort; 3].
let seed16v_ref: &[c_ushort; 3] = unsafe { slice::from_raw_parts(seed16v, 3) }
.try_into()
.unwrap();
unsafe { BUFFER = (*xsubi).into() };
// SAFETY: the caller is required to ensure exclusive access to
// RETURN_BUFFER.
let return_buffer_mut = unsafe { RETURN_BUFFER.unsafe_mut() };
*return_buffer_mut = (*xsubi).into();
*xsubi = seed16v_ref.into();
params.reset();
(&raw mut BUFFER).cast()
RETURN_BUFFER.as_mut_ptr().cast()
}
unsafe fn copy_kv(