diff --git a/src/header/arpa_inet/mod.rs b/src/header/arpa_inet/mod.rs index c20443aaa2e32ccb3df9121148503bd36b71db94..2af943a2fec36e59fef9c5074e17d1b5a2f1184c 100644 --- a/src/header/arpa_inet/mod.rs +++ b/src/header/arpa_inet/mod.rs @@ -1,5 +1,8 @@ //! arpa/inet implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xns/arpainet.h.html +// TODO: set this for entire crate when possible +#![deny(unsafe_op_in_unsafe_fn)] + use core::{ ptr, slice, str::{self, FromStr}, @@ -38,19 +41,21 @@ pub extern "C" fn ntohs(netshort: uint16_t) -> uint16_t { #[no_mangle] pub unsafe extern "C" fn inet_aton(cp: *const c_char, inp: *mut in_addr) -> c_int { // TODO: octal/hex - inet_pton(AF_INET, cp, inp as *mut c_void) + unsafe { inet_pton(AF_INET, cp, inp as *mut c_void) } } #[no_mangle] pub unsafe extern "C" fn inet_ntoa(addr: in_addr) -> *const c_char { static mut NTOA_ADDR: [c_char; 16] = [0; 16]; - inet_ntop( - AF_INET, - &addr as *const in_addr as *const c_void, - NTOA_ADDR.as_mut_ptr(), - 16, - ) + unsafe { + inet_ntop( + AF_INET, + &addr as *const in_addr as *const c_void, + NTOA_ADDR.as_mut_ptr(), + 16, + ) + } } #[no_mangle] @@ -59,12 +64,14 @@ pub unsafe extern "C" fn inet_pton(domain: c_int, src: *const c_char, dest: *mut platform::ERRNO.set(EAFNOSUPPORT); -1 } else { - let s_addr = slice::from_raw_parts_mut( - &mut (*(dest as *mut in_addr)).s_addr as *mut _ as *mut u8, - 4, - ); - let src_cstr = CStr::from_ptr(src); - let mut octets = str::from_utf8_unchecked(src_cstr.to_bytes()).split('.'); + let s_addr = unsafe { + slice::from_raw_parts_mut( + &mut (*(dest as *mut in_addr)).s_addr as *mut _ as *mut u8, + 4, + ) + }; + let src_cstr = unsafe { CStr::from_ptr(src) }; + let mut octets = unsafe { str::from_utf8_unchecked(src_cstr.to_bytes()).split('.') }; for i in 0..4 { if let Some(n) = octets.next().and_then(|x| u8::from_str(x).ok()) { s_addr[i] = n; @@ -94,12 +101,16 @@ pub unsafe extern "C" fn inet_ntop( platform::ERRNO.set(ENOSPC); ptr::null() } else { - let s_addr = slice::from_raw_parts( - &(*(src as *const in_addr)).s_addr as *const _ as *const u8, - 4, - ); + let s_addr = unsafe { + slice::from_raw_parts( + &(*(src as *const in_addr)).s_addr as *const _ as *const u8, + 4, + ) + }; let addr = format!("{}.{}.{}.{}\0", s_addr[0], s_addr[1], s_addr[2], s_addr[3]); - ptr::copy(addr.as_ptr() as *const c_char, dest, addr.len()); + unsafe { + ptr::copy(addr.as_ptr() as *const c_char, dest, addr.len()); + } dest } } @@ -108,7 +119,7 @@ pub unsafe extern "C" fn inet_ntop( pub unsafe extern "C" fn inet_addr(cp: *const c_char) -> in_addr_t { let mut val: in_addr = in_addr { s_addr: 0 }; - if inet_aton(cp, &mut val) > 0 { + if unsafe { inet_aton(cp, &mut val) } > 0 { val.s_addr } else { INADDR_NONE @@ -154,5 +165,5 @@ pub extern "C" fn inet_netof(input: in_addr) -> in_addr_t { #[no_mangle] pub unsafe extern "C" fn inet_network(cp: *mut c_char) -> in_addr_t { - ntohl(inet_addr(cp)) + ntohl(unsafe { inet_addr(cp) }) }