diff --git a/src/header/monetary/strfmon.rs b/src/header/monetary/strfmon.rs index 06d40f62c0..1ce9f8b010 100644 --- a/src/header/monetary/strfmon.rs +++ b/src/header/monetary/strfmon.rs @@ -1,3 +1,5 @@ +use crate::platform::types::c_char; + use super::{apply_grouping, FormatFlags, LocaleMonetaryInfo, DEFAULT_MONETARY}; use alloc::string::{String, ToString}; use core::{ffi::CStr, ptr, result, slice, str}; @@ -11,10 +13,10 @@ use libm::{fabs, floor, pow, round, trunc}; /// - The number of characters written (excluding the null terminator), or -1 if /// an error occurs (e.g., invalid input, buffer overflow) pub unsafe extern "C" fn strfmon( - s: *mut i8, // Output buffer - maxsize: usize, // Maximum size of the buffer - format: *const i8, // Format string - mut args: ... // Variadic arguments for monetary values + s: *mut c_char, // Output buffer + maxsize: usize, // Maximum size of the buffer + format: *const c_char, // Format string + mut args: ... // Variadic arguments for monetary values ) -> isize { // Validate input pointers and buffer size if s.is_null() || format.is_null() || maxsize == 0 { diff --git a/src/header/netdb/host.rs b/src/header/netdb/host.rs index d16ddb02d2..ac07680a36 100644 --- a/src/header/netdb/host.rs +++ b/src/header/netdb/host.rs @@ -27,7 +27,7 @@ pub static mut HOST_ENTRY: hostent = hostent { }; pub static mut HOST_NAME: Option> = None; pub static mut HOST_ALIASES: Option>> = None; -static mut _HOST_ALIASES: Option> = None; +static mut _HOST_ALIASES: Option> = None; pub static mut HOST_ADDR: Option = None; pub static mut HOST_ADDR_LIST: [*mut c_char; 2] = [ptr::null_mut(); 2]; pub static mut _HOST_ADDR_LIST: [u8; 4] = [0u8; 4]; @@ -79,7 +79,7 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent { let mut iter: SplitWhitespace = r.split_whitespace(); let addr_vec: Vec = iter.next().unwrap().bytes().chain(Some(b'\0')).collect(); - let addr_cstr = addr_vec.as_slice().as_ptr() as *const i8; + let addr_cstr = addr_vec.as_slice().as_ptr() as *const c_char; let mut addr = mem::MaybeUninit::uninit(); inet_aton(addr_cstr, addr.as_mut_ptr()); let addr = addr.assume_init(); @@ -96,11 +96,11 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent { .collect(); HOST_ALIASES = Some(_host_aliases); - let mut host_aliases: Vec<*mut i8> = HOST_ALIASES + let mut host_aliases: Vec<*mut c_char> = HOST_ALIASES .as_mut() .unwrap() .iter_mut() - .map(|x| x.as_mut_ptr() as *mut i8) + .map(|x| x.as_mut_ptr() as *mut c_char) .chain([ptr::null_mut(), ptr::null_mut()]) .collect(); @@ -108,7 +108,7 @@ pub unsafe extern "C" fn gethostent() -> *mut hostent { HOST_ENTRY = hostent { h_name: HOST_NAME.as_mut().unwrap().as_mut_ptr() as *mut c_char, - h_aliases: host_aliases.as_mut_slice().as_mut_ptr() as *mut *mut i8, + h_aliases: host_aliases.as_mut_slice().as_mut_ptr(), h_addrtype: AF_INET, h_length: 4, h_addr_list: HOST_ADDR_LIST.as_mut_ptr(), diff --git a/src/header/netdb/mod.rs b/src/header/netdb/mod.rs index e35a30fc37..620a84431c 100644 --- a/src/header/netdb/mod.rs +++ b/src/header/netdb/mod.rs @@ -249,9 +249,9 @@ pub unsafe extern "C" fn gethostbyaddr( if (*cp).is_null() { break; } - let mut cp_slice: [i8; 4] = [0i8; 4]; + let mut cp_slice: [c_char; 4] = [0; 4]; (*cp).copy_to(cp_slice.as_mut_ptr(), 4); - let cp_s_addr = mem::transmute::<[i8; 4], u32>(cp_slice); + let cp_s_addr = mem::transmute::<[c_char; 4], u32>(cp_slice); if cp_s_addr == addr.s_addr { sethostent(HOST_STAYOPEN); return p; @@ -263,7 +263,7 @@ pub unsafe extern "C" fn gethostbyaddr( //TODO actually get aliases let mut _host_aliases: Vec> = Vec::new(); _host_aliases.push(vec![b'\0']); - let mut host_aliases: Vec<*mut i8> = Vec::new(); + let mut host_aliases: Vec<*mut c_char> = Vec::new(); host_aliases.push(ptr::null_mut()); HOST_ALIASES = Some(_host_aliases); @@ -274,7 +274,7 @@ pub unsafe extern "C" fn gethostbyaddr( HOST_NAME = Some(host_name); HOST_ENTRY = hostent { h_name: HOST_NAME.as_mut().unwrap().as_mut_ptr() as *mut c_char, - h_aliases: host_aliases.as_mut_slice().as_mut_ptr() as *mut *mut i8, + h_aliases: host_aliases.as_mut_slice().as_mut_ptr(), h_addrtype: format, h_length: length as i32, h_addr_list: HOST_ADDR_LIST.as_mut_ptr(), @@ -395,14 +395,14 @@ pub unsafe extern "C" fn gethostbyname(name: *const c_char) -> *mut hostent { //TODO actually get aliases let mut _host_aliases: Vec> = Vec::new(); _host_aliases.push(vec![b'\0']); - let mut host_aliases: Vec<*mut i8> = Vec::new(); + let mut host_aliases: Vec<*mut c_char> = Vec::new(); host_aliases.push(ptr::null_mut()); host_aliases.push(ptr::null_mut()); HOST_ALIASES = Some(_host_aliases); HOST_ENTRY = hostent { h_name: HOST_NAME.as_mut().unwrap().as_mut_ptr() as *mut c_char, - h_aliases: host_aliases.as_mut_slice().as_mut_ptr() as *mut *mut i8, + h_aliases: host_aliases.as_mut_slice().as_mut_ptr(), h_addrtype: AF_INET, h_length: 4, h_addr_list: HOST_ADDR_LIST.as_mut_ptr(), @@ -466,7 +466,7 @@ pub unsafe extern "C" fn getnetent() -> *mut netent { NET_NAME = Some(net_name); let addr_vec: Vec = iter.next().unwrap().bytes().chain(Some(b'\0')).collect(); - let addr_cstr = addr_vec.as_slice().as_ptr() as *const i8; + let addr_cstr = addr_vec.as_slice().as_ptr() as *const c_char; let mut addr = mem::MaybeUninit::uninit(); inet_aton(addr_cstr, addr.as_mut_ptr()); let addr = addr.assume_init(); @@ -475,16 +475,16 @@ pub unsafe extern "C" fn getnetent() -> *mut netent { let mut _net_aliases: Vec> = iter .map(|alias| alias.bytes().chain(Some(b'\0')).collect()) .collect(); - let mut net_aliases: Vec<*mut i8> = _net_aliases + let mut net_aliases: Vec<*mut c_char> = _net_aliases .iter_mut() - .map(|x| x.as_mut_ptr() as *mut i8) + .map(|x| x.as_mut_ptr() as *mut c_char) .chain(Some(ptr::null_mut())) .collect(); NET_ALIASES = Some(_net_aliases); NET_ENTRY = netent { n_name: NET_NAME.as_mut().unwrap().as_mut_ptr() as *mut c_char, - n_aliases: net_aliases.as_mut_slice().as_mut_ptr() as *mut *mut i8, + n_aliases: net_aliases.as_mut_slice().as_mut_ptr(), n_addrtype: AF_INET, n_net: NET_ADDR.unwrap() as c_ulong, }; @@ -576,7 +576,7 @@ pub unsafe extern "C" fn getprotoent() -> *mut protoent { let mut num = iter.next().unwrap().as_bytes().to_vec(); num.push(b'\0'); - PROTO_NUM = Some(atoi(num.as_mut_slice().as_mut_ptr() as *mut i8)); + PROTO_NUM = Some(atoi(num.as_mut_slice().as_mut_ptr() as *mut c_char)); let mut _proto_aliases: Vec> = iter .map(|alias| alias.bytes().chain(Some(b'\0')).collect()) @@ -592,7 +592,7 @@ pub unsafe extern "C" fn getprotoent() -> *mut protoent { PROTO_ENTRY = protoent { p_name: PROTO_NAME.as_mut().unwrap().as_mut_slice().as_mut_ptr() as *mut c_char, - p_aliases: proto_aliases.as_mut_slice().as_mut_ptr() as *mut *mut i8, + p_aliases: proto_aliases.as_mut_slice().as_mut_ptr() as *mut *mut c_char, p_proto: PROTO_NUM.unwrap(), }; if PROTO_STAYOPEN == 0 { @@ -698,7 +698,7 @@ pub unsafe extern "C" fn getservent() -> *mut servent { None => continue, }; SERV_PORT = - Some(htons(atoi(port.as_mut_slice().as_mut_ptr() as *mut i8) as u16) as u32 as i32); + Some(htons(atoi(port.as_mut_slice().as_mut_ptr() as *mut c_char) as u16) as u32 as i32); let proto = match split.next() { Some(proto) => proto.bytes().chain(Some(b'\0')).collect(), None => continue, @@ -733,7 +733,7 @@ pub unsafe extern "C" fn getservent() -> *mut servent { SERV_ENTRY = servent { s_name: SERV_NAME.as_mut().unwrap().as_mut_slice().as_mut_ptr() as *mut c_char, - s_aliases: serv_aliases.as_mut_slice().as_mut_ptr() as *mut *mut i8, + s_aliases: serv_aliases.as_mut_slice().as_mut_ptr() as *mut *mut c_char, s_port: SERV_PORT.unwrap(), s_proto: SERV_PROTO.as_mut().unwrap().as_mut_slice().as_mut_ptr() as *mut c_char, }; diff --git a/src/header/stdio/helpers.rs b/src/header/stdio/helpers.rs index 8fc4aa3f6e..e2be3bdb18 100644 --- a/src/header/stdio/helpers.rs +++ b/src/header/stdio/helpers.rs @@ -14,7 +14,7 @@ use alloc::vec::Vec; pub unsafe fn parse_mode_flags(mode_str: *const c_char) -> i32 { let mut flags = if !strchr(mode_str, b'+' as i32).is_null() { O_RDWR - } else if (*mode_str) == b'r' as i8 { + } else if (*mode_str) == b'r' as c_char { O_RDONLY } else { O_WRONLY @@ -25,12 +25,12 @@ pub unsafe fn parse_mode_flags(mode_str: *const c_char) -> i32 { if !strchr(mode_str, b'e' as i32).is_null() { flags |= O_CLOEXEC; } - if (*mode_str) != b'r' as i8 { + if (*mode_str) != b'r' as c_char { flags |= O_CREAT; } - if (*mode_str) == b'w' as i8 { + if (*mode_str) == b'w' as c_char { flags |= O_TRUNC; - } else if (*mode_str) == b'a' as i8 { + } else if (*mode_str) == b'a' as c_char { flags |= O_APPEND; } @@ -39,21 +39,25 @@ pub unsafe fn parse_mode_flags(mode_str: *const c_char) -> i32 { /// Open a file with the file descriptor `fd` in the mode `mode` pub unsafe fn _fdopen(fd: c_int, mode: *const c_char) -> Option<*mut FILE> { - if *mode != b'r' as i8 && *mode != b'w' as i8 && *mode != b'a' as i8 { + if *mode != b'r' as c_char && *mode != b'w' as c_char && *mode != b'a' as c_char { platform::ERRNO.set(errno::EINVAL); return None; } let mut flags = 0; if strchr(mode, b'+' as i32).is_null() { - flags |= if *mode == b'r' as i8 { F_NOWR } else { F_NORD }; + flags |= if *mode == b'r' as c_char { + F_NOWR + } else { + F_NORD + }; } if !strchr(mode, b'e' as i32).is_null() { fcntl(fd, F_SETFD, FD_CLOEXEC as c_ulonglong); } - if *mode == 'a' as i8 { + if *mode == 'a' as c_char { let f = fcntl(fd, F_GETFL, 0); if (f & O_APPEND) == 0 { fcntl(fd, F_SETFL, (f | O_APPEND) as c_ulonglong); diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs index 7e87db1e86..19a0a39919 100644 --- a/src/header/stdio/mod.rs +++ b/src/header/stdio/mod.rs @@ -292,7 +292,7 @@ pub unsafe extern "C" fn ctermid(s: *mut c_char) -> *mut c_char { // #[no_mangle] pub unsafe extern "C" fn cuserid(s: *mut c_char) -> *mut c_char { - let mut buf: Vec = vec![0; 256]; + let mut buf: Vec = vec![0; 256]; let mut pwd: pwd::passwd = unsafe { mem::zeroed() }; let mut pwdbuf: *mut pwd::passwd = unsafe { mem::zeroed() }; if s != ptr::null_mut() { @@ -434,7 +434,7 @@ pub unsafe extern "C" fn fgets( if left >= 1 { let unget_read_size = cmp::min(left, stream.unget.len()); for _ in 0..unget_read_size { - *out = stream.unget.pop().unwrap() as i8; + *out = stream.unget.pop().unwrap() as c_char; out = out.offset(1); } left -= unget_read_size; @@ -505,7 +505,10 @@ pub unsafe extern "C" fn flockfile(file: *mut FILE) { #[no_mangle] pub unsafe extern "C" fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE { let initial_mode = *mode; - if initial_mode != b'r' as i8 && initial_mode != b'w' as i8 && initial_mode != b'a' as i8 { + if initial_mode != b'r' as c_char + && initial_mode != b'w' as c_char + && initial_mode != b'a' as c_char + { platform::ERRNO.set(errno::EINVAL); return ptr::null_mut(); } diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index 8a4132c3c3..d5a494197b 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -466,7 +466,7 @@ pub unsafe extern "C" fn getsubopt( i = i + 1; continue; } - if (*start.offset(len)) == b'=' as i8 { + if (*start.offset(len)) == b'=' as c_char { *valuep = start.offset(len + 1); } else if !start.offset(len).is_null() { i = i + 1; diff --git a/src/header/string/mod.rs b/src/header/string/mod.rs index 2d08f56d43..852108e708 100644 --- a/src/header/string/mod.rs +++ b/src/header/string/mod.rs @@ -620,7 +620,7 @@ pub unsafe extern "C" fn strpbrk(s1: *const c_char, s2: *const c_char) -> *mut c #[no_mangle] pub unsafe extern "C" fn strrchr(s: *const c_char, c: c_int) -> *mut c_char { let len = strlen(s) as isize; - let c = c as i8; + let c = c as c_char; let mut i = len - 1; while i >= 0 { if *s.offset(i) == c { diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs index 2698e2abfa..f28f23fea5 100644 --- a/src/platform/redox/socket.rs +++ b/src/platform/redox/socket.rs @@ -143,7 +143,7 @@ unsafe fn inner_af_inet( let mut addr = in_addr::default(); assert_eq!( - inet_aton(raw_addr.as_ptr() as *mut i8, &mut addr), + inet_aton(raw_addr.as_ptr() as *mut c_char, &mut addr), 1, "inet_aton might be broken, failed to parse netstack address" ); diff --git a/src/platform/types.rs b/src/platform/types.rs index 10ac216107..a6fdf693b5 100644 --- a/src/platform/types.rs +++ b/src/platform/types.rs @@ -42,7 +42,7 @@ pub type intptr_t = isize; pub type uintptr_t = usize; pub type ssize_t = isize; -pub type c_char = i8; +pub type c_char = core::ffi::c_char; #[cfg(target_pointer_width = "32")] pub type c_long = i32; #[cfg(target_pointer_width = "32")]