@@ -12,7 +12,7 @@ use crate::hash;
12
12
use crate :: io:: Write as IoWrite ;
13
13
use crate :: mem:: transmute;
14
14
use crate :: sys:: net:: netc as c;
15
- use crate :: sys_common:: { AsInner , FromInner } ;
15
+ use crate :: sys_common:: { AsInner , FromInner , IntoInner } ;
16
16
17
17
/// An IP address, either IPv4 or IPv6.
18
18
///
@@ -909,7 +909,10 @@ impl Eq for Ipv4Addr {}
909
909
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
910
910
impl hash:: Hash for Ipv4Addr {
911
911
fn hash < H : hash:: Hasher > ( & self , s : & mut H ) {
912
- // `inner` is #[repr(packed)], so we need to copy `s_addr`.
912
+ // NOTE:
913
+ // * hash in big endian order
914
+ // * in netbsd, `in_addr` has `repr(packed)`, we need to
915
+ // copy `s_addr` to avoid unsafe borrowing
913
916
{ self . inner . s_addr } . hash ( s)
914
917
}
915
918
}
@@ -944,13 +947,14 @@ impl PartialOrd<IpAddr> for Ipv4Addr {
944
947
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
945
948
impl Ord for Ipv4Addr {
946
949
fn cmp ( & self , other : & Ipv4Addr ) -> Ordering {
950
+ // Compare as native endian
947
951
u32:: from_be ( self . inner . s_addr ) . cmp ( & u32:: from_be ( other. inner . s_addr ) )
948
952
}
949
953
}
950
954
951
- impl AsInner < c:: in_addr > for Ipv4Addr {
952
- fn as_inner ( & self ) -> & c:: in_addr {
953
- & self . inner
955
+ impl IntoInner < c:: in_addr > for Ipv4Addr {
956
+ fn into_inner ( self ) -> c:: in_addr {
957
+ self . inner
954
958
}
955
959
}
956
960
@@ -2019,6 +2023,7 @@ mod tests {
2019
2023
2020
2024
#[ test]
2021
2025
fn ipv4_addr_to_string ( ) {
2026
+ assert_eq ! ( Ipv4Addr :: new( 127 , 0 , 0 , 1 ) . to_string( ) , "127.0.0.1" ) ;
2022
2027
// Short address
2023
2028
assert_eq ! ( Ipv4Addr :: new( 1 , 1 , 1 , 1 ) . to_string( ) , "1.1.1.1" ) ;
2024
2029
// Long address
0 commit comments