svn commit: r348658 - in head/stand/efi: include libefi
Warner Losh
imp at FreeBSD.org
Tue Jun 4 18:36:09 UTC 2019
Author: imp
Date: Tue Jun 4 18:36:07 2019
New Revision: 348658
URL: https://svnweb.freebsd.org/changeset/base/348658
Log:
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
Modified:
head/stand/efi/include/efilib.h
head/stand/efi/libefi/devpath.c
Modified: head/stand/efi/include/efilib.h
==============================================================================
--- head/stand/efi/include/efilib.h Tue Jun 4 18:34:05 2019 (r348657)
+++ head/stand/efi/include/efilib.h Tue Jun 4 18:36:07 2019 (r348658)
@@ -90,6 +90,7 @@ bool efi_devpath_match_node(EFI_DEVICE_PATH *, EFI_DEV
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);
Modified: head/stand/efi/libefi/devpath.c
==============================================================================
--- head/stand/efi/libefi/devpath.c Tue Jun 4 18:34:05 2019 (r348657)
+++ head/stand/efi/libefi/devpath.c Tue Jun 4 18:36:07 2019 (r348658)
@@ -197,14 +197,19 @@ efi_devpath_match_node(EFI_DEVICE_PATH *devpath1, EFI_
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))
@@ -213,6 +218,25 @@ efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVIC
devpath2 = NextDevicePathNode(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
More information about the svn-src-all
mailing list