| 
1 | 1 | //! Comparison traits for `[T]`.  | 
2 | 2 | 
  | 
3 |  | -use crate::cmp::{self, BytewiseEq, Ordering};  | 
 | 3 | +use crate::cmp::{self, Ordering};  | 
4 | 4 | use crate::ffi;  | 
5 |  | -use crate::mem;  | 
6 | 5 | 
 
  | 
7 | 6 | use super::from_raw_parts;  | 
8 | 7 | use super::memchr;  | 
@@ -92,20 +91,28 @@ where  | 
92 | 91 | }  | 
93 | 92 | 
 
  | 
94 | 93 | // Use memcmp for bytewise equality when the types allow  | 
95 |  | -impl<A, B> SlicePartialEq<B> for [A]  | 
96 |  | -where  | 
97 |  | -    A: BytewiseEq<B>,  | 
98 |  | -{  | 
99 |  | -    fn equal(&self, other: &[B]) -> bool {  | 
100 |  | -        if self.len() != other.len() {  | 
101 |  | -            return false;  | 
102 |  | -        }  | 
 | 94 | +// and `memcmp` is not equivalent to our generic case  | 
 | 95 | +#[cfg(not(target_env = "musl"))]  | 
 | 96 | +mod bytewise_memcmp {  | 
 | 97 | +    use super::{memcmp, SlicePartialEq};  | 
 | 98 | +    use crate::cmp::BytewiseEq;  | 
 | 99 | +    use crate::mem;  | 
 | 100 | + | 
 | 101 | +    impl<A, B> SlicePartialEq<B> for [A]  | 
 | 102 | +    where  | 
 | 103 | +        A: BytewiseEq<B>,  | 
 | 104 | +    {  | 
 | 105 | +        fn equal(&self, other: &[B]) -> bool {  | 
 | 106 | +            if self.len() != other.len() {  | 
 | 107 | +                return false;  | 
 | 108 | +            }  | 
103 | 109 | 
 
  | 
104 |  | -        // SAFETY: `self` and `other` are references and are thus guaranteed to be valid.  | 
105 |  | -        // The two slices have been checked to have the same size above.  | 
106 |  | -        unsafe {  | 
107 |  | -            let size = mem::size_of_val(self);  | 
108 |  | -            memcmp(self.as_ptr() as *const u8, other.as_ptr() as *const u8, size) == 0  | 
 | 110 | +            // SAFETY: `self` and `other` are references and are thus guaranteed to be valid.  | 
 | 111 | +            // The two slices have been checked to have the same size above.  | 
 | 112 | +            unsafe {  | 
 | 113 | +                let size = mem::size_of_val(self);  | 
 | 114 | +                memcmp(self.as_ptr() as *const u8, other.as_ptr() as *const u8, size) == 0  | 
 | 115 | +            }  | 
109 | 116 |         }  | 
110 | 117 |     }  | 
111 | 118 | }  | 
 | 
0 commit comments