uefi: Use slice equality rather than memcmp
`compiler_builtins` shouldn't be called directly. Change the `PartialEq` implementation for `DevicePathNode` to use slice equality instead, which will call `memcmp`/`bcmp` via the intrinsic.
This commit is contained in:
parent
e5e79f8bd4
commit
8d0b92acbf
1 changed files with 11 additions and 11 deletions
|
|
@ -444,17 +444,17 @@ impl<'a> DevicePathNode<'a> {
|
|||
|
||||
impl<'a> PartialEq for DevicePathNode<'a> {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
let self_len = self.length();
|
||||
let other_len = other.length();
|
||||
|
||||
self_len == other_len
|
||||
&& unsafe {
|
||||
compiler_builtins::mem::memcmp(
|
||||
self.protocol.as_ptr().cast(),
|
||||
other.protocol.as_ptr().cast(),
|
||||
usize::from(self_len),
|
||||
) == 0
|
||||
}
|
||||
// Compare as a single buffer rather than by field since it optimizes better.
|
||||
//
|
||||
// SAFETY: `Protocol` is followed by a buffer of `length - sizeof::<Protocol>()`. `Protocol`
|
||||
// has no padding so it is sound to interpret as a slice.
|
||||
unsafe {
|
||||
let s1 =
|
||||
slice::from_raw_parts(self.protocol.as_ptr().cast::<u8>(), self.length().into());
|
||||
let s2 =
|
||||
slice::from_raw_parts(other.protocol.as_ptr().cast::<u8>(), other.length().into());
|
||||
s1 == s2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue