Introduce efi_devpath_same_disk
This is like efi_devpath_match, but allows differing device media paths. Those just specify the partition information. Differential Revision: https://reviews.freebsd.org/D20513
This commit is contained in:
parent
bec7330290
commit
6f3c45cf47
@ -90,6 +90,7 @@ bool efi_devpath_match_node(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
|
||||
bool efi_devpath_is_prefix(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
|
||||
CHAR16 *efi_devpath_name(EFI_DEVICE_PATH *);
|
||||
void efi_free_devpath_name(CHAR16 *);
|
||||
bool efi_devpath_same_disk(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
|
||||
EFI_DEVICE_PATH *efi_devpath_to_media_path(EFI_DEVICE_PATH *);
|
||||
UINTN efi_devpath_length(EFI_DEVICE_PATH *);
|
||||
EFI_DEVICE_PATH *efi_name_to_devpath(const char *path);
|
||||
|
@ -197,14 +197,19 @@ efi_devpath_match_node(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
|
||||
return (true);
|
||||
}
|
||||
|
||||
bool
|
||||
efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
|
||||
static bool
|
||||
_efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2,
|
||||
bool ignore_media)
|
||||
{
|
||||
|
||||
if (devpath1 == NULL || devpath2 == NULL)
|
||||
return (false);
|
||||
|
||||
while (true) {
|
||||
if (ignore_media &&
|
||||
IsDevicePathType(devpath1, MEDIA_DEVICE_PATH) &&
|
||||
IsDevicePathType(devpath2, MEDIA_DEVICE_PATH))
|
||||
return (true);
|
||||
if (!efi_devpath_match_node(devpath1, devpath2))
|
||||
return false;
|
||||
if (IsDevicePathEnd(devpath1))
|
||||
@ -214,6 +219,25 @@ efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
|
||||
}
|
||||
return (true);
|
||||
}
|
||||
/*
|
||||
* Are two devpaths identical?
|
||||
*/
|
||||
bool
|
||||
efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
|
||||
{
|
||||
return _efi_devpath_match(devpath1, devpath2, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Like efi_devpath_match, but stops at when we hit the media device
|
||||
* path node that specifies the partition information. If we match
|
||||
* up to that point, then we're on the same disk.
|
||||
*/
|
||||
bool
|
||||
efi_devpath_same_disk(EFI_DEVICE_PATH *devpath1, EFI_DEVICE_PATH *devpath2)
|
||||
{
|
||||
return _efi_devpath_match(devpath1, devpath2, true);
|
||||
}
|
||||
|
||||
bool
|
||||
efi_devpath_is_prefix(EFI_DEVICE_PATH *prefix, EFI_DEVICE_PATH *path)
|
||||
|
Loading…
x
Reference in New Issue
Block a user