Add RawCell::unsafe_set

This commit is contained in:
Jeremy Soller
2025-10-04 07:50:16 -06:00
parent 82084440ad
commit ced734c162
8 changed files with 41 additions and 36 deletions
+3 -3
View File
@@ -95,7 +95,7 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent {
let mut _host_aliases: Vec<Vec<u8>> = iter
.map(|alias| alias.bytes().chain(Some(b'\0')).collect())
.collect();
*HOST_ALIASES.as_mut_ptr() = Some(_host_aliases);
HOST_ALIASES.unsafe_set(Some(_host_aliases));
let mut host_aliases: Vec<*mut c_char> = HOST_ALIASES
.unsafe_mut()
@@ -106,7 +106,7 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent {
.chain([ptr::null_mut(), ptr::null_mut()])
.collect();
*HOST_NAME.as_mut_ptr() = Some(host_name);
HOST_NAME.unsafe_set(Some(host_name));
HOST_ENTRY = hostent {
h_name: HOST_NAME.unsafe_mut().as_mut().unwrap().as_mut_ptr() as *mut c_char,
@@ -115,7 +115,7 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent {
h_length: 4,
h_addr_list: &raw mut HOST_ADDR_LIST as *mut _,
};
*_HOST_ALIASES.as_mut_ptr() = Some(host_aliases);
_HOST_ALIASES.unsafe_set(Some(host_aliases));
if HOST_STAYOPEN == 0 {
endhostent();
}
+11 -11
View File
@@ -267,13 +267,13 @@ pub unsafe extern "C" fn gethostbyaddr(
_host_aliases.push(vec![b'\0']);
let mut host_aliases: Vec<*mut c_char> = Vec::new();
host_aliases.push(ptr::null_mut());
*HOST_ALIASES.as_mut_ptr() = Some(_host_aliases);
HOST_ALIASES.unsafe_set(Some(_host_aliases));
match lookup_addr(addr).map(|host_names| host_names.into_iter().next()) {
Ok(Some(host_name)) => {
_HOST_ADDR_LIST = addr.s_addr.to_ne_bytes();
HOST_ADDR_LIST = [&raw mut _HOST_ADDR_LIST as *mut c_char, ptr::null_mut()];
*HOST_NAME.as_mut_ptr() = Some(host_name);
HOST_NAME.unsafe_set(Some(host_name));
HOST_ENTRY = hostent {
h_name: HOST_NAME.unsafe_mut().as_mut().unwrap().as_mut_ptr() as *mut c_char,
h_aliases: host_aliases.as_mut_slice().as_mut_ptr(),
@@ -373,7 +373,7 @@ pub unsafe extern "C" fn gethostbyname(name: *const c_char) -> *mut hostent {
};
let host_name: Vec<u8> = name_cstr.to_bytes().to_vec();
*HOST_NAME.as_mut_ptr() = Some(host_name);
HOST_NAME.unsafe_set(Some(host_name));
_HOST_ADDR_LIST = host_addr.s_addr.to_ne_bytes();
HOST_ADDR_LIST = [&raw mut _HOST_ADDR_LIST as *mut c_char, ptr::null_mut()];
HOST_ADDR = Some(host_addr);
@@ -384,7 +384,7 @@ pub unsafe extern "C" fn gethostbyname(name: *const c_char) -> *mut hostent {
let mut host_aliases: Vec<*mut c_char> = Vec::new();
host_aliases.push(ptr::null_mut());
host_aliases.push(ptr::null_mut());
*HOST_ALIASES.as_mut_ptr() = Some(_host_aliases);
HOST_ALIASES.unsafe_set(Some(_host_aliases));
HOST_ENTRY = hostent {
h_name: HOST_NAME.unsafe_mut().as_mut().unwrap().as_mut_ptr() as *mut c_char,
@@ -449,7 +449,7 @@ pub unsafe extern "C" fn getnetent() -> *mut netent {
let mut iter: SplitWhitespace = r.split_whitespace();
let net_name = iter.next().unwrap().bytes().chain(Some(b'\0')).collect();
*NET_NAME.as_mut_ptr() = Some(net_name);
NET_NAME.unsafe_set(Some(net_name));
let addr_vec: Vec<u8> = iter.next().unwrap().bytes().chain(Some(b'\0')).collect();
let addr_cstr = addr_vec.as_slice().as_ptr() as *const c_char;
@@ -466,7 +466,7 @@ pub unsafe extern "C" fn getnetent() -> *mut netent {
.map(|x| x.as_mut_ptr() as *mut c_char)
.chain(Some(ptr::null_mut()))
.collect();
*NET_ALIASES.as_mut_ptr() = Some(_net_aliases);
NET_ALIASES.unsafe_set(Some(_net_aliases));
NET_ENTRY = netent {
n_name: NET_NAME.unsafe_mut().as_mut().unwrap().as_mut_ptr() as *mut c_char,
@@ -573,8 +573,8 @@ pub unsafe extern "C" fn getprotoent() -> *mut protoent {
.chain(Some(ptr::null_mut()))
.collect();
*PROTO_ALIASES.as_mut_ptr() = Some(_proto_aliases);
*PROTO_NAME.as_mut_ptr() = Some(proto_name);
PROTO_ALIASES.unsafe_set(Some(_proto_aliases));
PROTO_NAME.unsafe_set(Some(proto_name));
PROTO_ENTRY = protoent {
p_name: PROTO_NAME
@@ -718,9 +718,9 @@ pub unsafe extern "C" fn getservent() -> *mut servent {
serv_aliases.push(ptr::null_mut());
serv_aliases.push(ptr::null_mut());
*SERV_ALIASES.as_mut_ptr() = Some(_serv_aliases);
*SERV_NAME.as_mut_ptr() = Some(serv_name);
*SERV_PROTO.as_mut_ptr() = Some(proto);
SERV_ALIASES.unsafe_set(Some(_serv_aliases));
SERV_NAME.unsafe_set(Some(serv_name));
SERV_PROTO.unsafe_set(Some(proto));
SERV_ENTRY = servent {
s_name: SERV_NAME
+3 -3
View File
@@ -104,7 +104,7 @@ impl OwnedPwd {
fn into_global(self) -> *mut passwd {
unsafe {
PASSWD_BUF = Some(self.buffer);
*PASSWD.as_mut_ptr() = self.reference;
PASSWD.unsafe_set(self.reference);
PASSWD.as_mut_ptr()
}
}
@@ -224,7 +224,7 @@ unsafe fn mux(
#[unsafe(no_mangle)]
pub extern "C" fn endpwent() {
unsafe {
*READER.as_mut_ptr() = None;
READER.unsafe_set(None);
}
}
@@ -240,7 +240,7 @@ pub extern "C" fn getpwent() -> *mut passwd {
};
let reader = BufReader::new(file);
unsafe {
*READER.as_mut_ptr() = Some(reader);
READER.unsafe_set(Some(reader));
READER.unsafe_mut().as_mut().unwrap()
}
}
+1 -1
View File
@@ -548,7 +548,7 @@ pub unsafe extern "C" fn l64a(value: c_long) -> *mut c_char {
let num_output_digits = usize::try_from(6 - (value_as_i32.leading_zeros() + 4) / 6).unwrap();
// Reset buffer (and have null terminator in place for any result)
*L64A_BUFFER.as_mut_ptr() = [0; 7];
L64A_BUFFER.unsafe_set([0; 7]);
for i in 0..num_output_digits {
// Conversion to c_char always succeeds for the range 0..=63