svn commit: r324359 - in head/sys/boot/efi: include libefi
Warner Losh
imp at FreeBSD.org
Fri Oct 6 12:20:25 UTC 2017
Author: imp
Date: Fri Oct 6 12:20:24 2017
New Revision: 324359
URL: https://svnweb.freebsd.org/changeset/base/324359
Log:
Add efi_devpath_is_prefix
efi_devpath_is_prefix determines if a path matches a passed-in prefix.
Differential Revision: https://reviews.freebsd.org/D12564
Submitted by: Eric McCorkle
Modified:
head/sys/boot/efi/include/efilib.h
head/sys/boot/efi/libefi/devpath.c
Modified: head/sys/boot/efi/include/efilib.h
==============================================================================
--- head/sys/boot/efi/include/efilib.h Fri Oct 6 11:48:09 2017 (r324358)
+++ head/sys/boot/efi/include/efilib.h Fri Oct 6 12:20:24 2017 (r324359)
@@ -82,6 +82,7 @@ EFI_HANDLE efi_devpath_handle(EFI_DEVICE_PATH *);
EFI_DEVICE_PATH *efi_devpath_last_node(EFI_DEVICE_PATH *);
EFI_DEVICE_PATH *efi_devpath_trim(EFI_DEVICE_PATH *);
bool efi_devpath_match(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
+int efi_devpath_is_prefix(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
CHAR16 *efi_devpath_name(EFI_DEVICE_PATH *);
void efi_free_devpath_name(CHAR16 *);
Modified: head/sys/boot/efi/libefi/devpath.c
==============================================================================
--- head/sys/boot/efi/libefi/devpath.c Fri Oct 6 11:48:09 2017 (r324358)
+++ head/sys/boot/efi/libefi/devpath.c Fri Oct 6 12:20:24 2017 (r324359)
@@ -166,3 +166,32 @@ efi_devpath_match(EFI_DEVICE_PATH *devpath1, EFI_DEVIC
}
return (true);
}
+
+int
+efi_devpath_is_prefix(EFI_DEVICE_PATH *prefix, EFI_DEVICE_PATH *path)
+{
+ int len;
+
+ if (prefix == NULL || path == NULL)
+ return (0);
+
+ while (1) {
+ if (IsDevicePathEnd(prefix))
+ break;
+
+ if (DevicePathType(prefix) != DevicePathType(path) ||
+ DevicePathSubType(prefix) != DevicePathSubType(path))
+ return (0);
+
+ len = DevicePathNodeLength(prefix);
+ if (len != DevicePathNodeLength(path))
+ return (0);
+
+ if (memcmp(prefix, path, (size_t)len) != 0)
+ return (0);
+
+ prefix = NextDevicePathNode(prefix);
+ path = NextDevicePathNode(path);
+ }
+ return (1);
+}
More information about the svn-src-head
mailing list