@@ -12,7 +12,7 @@ use crate::hash;
1212use crate :: io:: Write as IoWrite ;
1313use crate :: mem:: transmute;
1414use crate :: sys:: net:: netc as c;
15- use crate :: sys_common:: { AsInner , FromInner } ;
15+ use crate :: sys_common:: { AsInner , FromInner , IntoInner } ;
1616
1717/// An IP address, either IPv4 or IPv6.
1818///
@@ -909,8 +909,8 @@ impl Eq for Ipv4Addr {}
909909#[ stable( feature = "rust1" , since = "1.0.0" ) ]
910910impl hash:: Hash for Ipv4Addr {
911911 fn hash < H : hash:: Hasher > ( & self , s : & mut H ) {
912- // `inner` is #[repr(packed)], so we need to copy `s_addr`.
913- { self . inner . s_addr } . hash ( s)
912+ // hashing in big endian
913+ self . inner . s_addr . hash ( s)
914914 }
915915}
916916
@@ -944,13 +944,14 @@ impl PartialOrd<IpAddr> for Ipv4Addr {
944944#[ stable( feature = "rust1" , since = "1.0.0" ) ]
945945impl Ord for Ipv4Addr {
946946 fn cmp ( & self , other : & Ipv4Addr ) -> Ordering {
947+ // Compare as native endian
947948 u32:: from_be ( self . inner . s_addr ) . cmp ( & u32:: from_be ( other. inner . s_addr ) )
948949 }
949950}
950951
951- impl AsInner < c:: in_addr > for Ipv4Addr {
952- fn as_inner ( & self ) -> & c:: in_addr {
953- & self . inner
952+ impl IntoInner < c:: in_addr > for Ipv4Addr {
953+ fn into_inner ( self ) -> c:: in_addr {
954+ self . inner
954955 }
955956}
956957
@@ -2019,6 +2020,7 @@ mod tests {
20192020
20202021 #[ test]
20212022 fn ipv4_addr_to_string ( ) {
2023+ assert_eq ! ( Ipv4Addr :: new( 127 , 0 , 0 , 1 ) . to_string( ) , "127.0.0.1" ) ;
20222024 // Short address
20232025 assert_eq ! ( Ipv4Addr :: new( 1 , 1 , 1 , 1 ) . to_string( ) , "1.1.1.1" ) ;
20242026 // Long address
0 commit comments