@@ -820,15 +820,16 @@ impl SockAddr {
820
820
/// let mut addr = mem::MaybeUninit::<sockaddr_storage>::uninit();
821
821
/// let mut addrlen = mem::size_of::<sockaddr_storage>() as socklen_t;
822
822
/// unsafe { get_me_an_address(addr.as_mut_ptr() as *mut sockaddr, &mut addrlen) };
823
- /// let addr: SockAddr = unsafe { SockAddr::from_raw_sockaddr(addr.as_ptr() as *const sockaddr, addrlen as usize )? };
823
+ /// let addr: SockAddr = unsafe { SockAddr::from_raw_sockaddr(addr.as_ptr() as *const sockaddr, addrlen)? };
824
824
/// # let _ = addr;
825
825
/// # Ok(()) }
826
826
/// ```
827
827
///
828
828
/// # Safety
829
829
/// `addr` must be a valid, non-null pointer, and `len` should describe the
830
830
/// number of bytes within `*addr` that are initialized and represent data.
831
- pub unsafe fn from_raw_sockaddr ( addr : * const libc:: sockaddr , len : usize ) -> Result < SockAddr > {
831
+ pub unsafe fn from_raw_sockaddr ( addr : * const libc:: sockaddr , len : libc:: socklen_t ) -> Result < SockAddr > {
832
+ let len = len as usize ;
832
833
let af = ( * addr) . sa_family ;
833
834
if len < mem:: size_of_val ( & af) {
834
835
return Err ( Errno :: ENOTCONN ) ;
@@ -838,13 +839,13 @@ impl SockAddr {
838
839
match af {
839
840
AddressFamily :: Inet => {
840
841
use libc:: sockaddr_in;
841
- assert ! ( len as usize >= mem:: size_of:: <sockaddr_in>( ) ) ;
842
+ assert ! ( len >= mem:: size_of:: <sockaddr_in>( ) ) ;
842
843
let sin = * ( addr as * const sockaddr_in ) ;
843
844
Ok ( SockAddr :: Inet ( InetAddr :: V4 ( sin) ) )
844
845
}
845
846
AddressFamily :: Inet6 => {
846
847
use libc:: sockaddr_in6;
847
- assert ! ( len as usize >= mem:: size_of:: <sockaddr_in6>( ) ) ;
848
+ assert ! ( len >= mem:: size_of:: <sockaddr_in6>( ) ) ;
848
849
let sin6 = * ( addr as * const sockaddr_in6 ) ;
849
850
Ok ( SockAddr :: Inet ( InetAddr :: V6 ( sin6) ) )
850
851
}
@@ -1434,7 +1435,7 @@ mod tests {
1434
1435
fn test_macos_loopback_datalink_addr ( ) {
1435
1436
let bytes = [ 20i8 , 18 , 1 , 0 , 24 , 3 , 0 , 0 , 108 , 111 , 48 , 0 , 0 , 0 , 0 , 0 ] ;
1436
1437
let sa = bytes. as_ptr ( ) as * const libc:: sockaddr ;
1437
- let sock_addr = unsafe { SockAddr :: from_raw_sockaddr ( sa, bytes. len ( ) ) . unwrap ( ) } ;
1438
+ let sock_addr = unsafe { SockAddr :: from_raw_sockaddr ( sa, bytes. len ( ) as _ ) . unwrap ( ) } ;
1438
1439
if let SockAddr :: Link ( link_addr) = sock_addr {
1439
1440
assert ! ( link_addr. is_empty( ) )
1440
1441
} else {
@@ -1453,7 +1454,7 @@ mod tests {
1453
1454
let bytes = [ 20i8 , 18 , 7 , 0 , 6 , 3 , 6 , 0 , 101 , 110 , 48 , 24 , 101 , -112 , -35 , 76 , -80 ] ;
1454
1455
let ptr = bytes. as_ptr ( ) ;
1455
1456
let sa = ptr as * const libc:: sockaddr ;
1456
- let sock_addr = unsafe { SockAddr :: from_raw_sockaddr ( sa, bytes. len ( ) ) . unwrap ( ) } ;
1457
+ let sock_addr = unsafe { SockAddr :: from_raw_sockaddr ( sa, bytes. len ( ) as _ ) . unwrap ( ) } ;
1457
1458
1458
1459
assert_eq ! ( sock_addr. family( ) , AddressFamily :: Link ) ;
1459
1460
@@ -1471,7 +1472,7 @@ mod tests {
1471
1472
let bytes = [ 25u8 , 0 , 0 , 0 , 6 , 0 , 6 , 0 , 24 , 101 , 144 , 221 , 76 , 176 ] ;
1472
1473
let ptr = bytes. as_ptr ( ) ;
1473
1474
let sa = ptr as * const libc:: sockaddr ;
1474
- let sock_addr = unsafe { SockAddr :: from_raw_sockaddr ( sa, bytes. len ( ) ) . unwrap ( ) } ;
1475
+ let sock_addr = unsafe { SockAddr :: from_raw_sockaddr ( sa, bytes. len ( ) as _ ) . unwrap ( ) } ;
1475
1476
1476
1477
assert_eq ! ( sock_addr. family( ) , AddressFamily :: Link ) ;
1477
1478
0 commit comments