From: Jan Janssen Date: Sun, 5 Jun 2022 13:31:01 +0000 (+0200) Subject: boot: Add device_path_to_str X-Git-Tag: v252-rc2~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b3eb196a2480b2671dcd6c14792fefc48f1abb1;p=thirdparty%2Fsystemd.git boot: Add device_path_to_str --- diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index e17a8e18a4c..5547d288de1 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -769,6 +769,25 @@ EFI_STATUS make_file_device_path(EFI_HANDLE device, const char16_t *file, EFI_DE return EFI_SUCCESS; } +EFI_STATUS device_path_to_str(const EFI_DEVICE_PATH *dp, char16_t **ret) { + EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *dp_to_text; + EFI_STATUS err; + + assert(dp); + assert(ret); + + err = BS->LocateProtocol(&(EFI_GUID) EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID, NULL, (void **) &dp_to_text); + if (err != EFI_SUCCESS) + return err; + + char16_t *str = dp_to_text->ConvertDevicePathToText(dp, false, false); + if (!str) + return EFI_OUT_OF_RESOURCES; + + *ret = str; + return EFI_SUCCESS; +} + #if defined(__i386__) || defined(__x86_64__) bool in_hypervisor(void) { uint32_t eax, ebx, ecx, edx; diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h index be79b205a42..b33c50f9fc7 100644 --- a/src/boot/efi/util.h +++ b/src/boot/efi/util.h @@ -207,6 +207,7 @@ static inline void beep(UINTN beep_count) {} EFI_STATUS open_volume(EFI_HANDLE device, EFI_FILE **ret_file); EFI_STATUS make_file_device_path(EFI_HANDLE device, const char16_t *file, EFI_DEVICE_PATH **ret_dp); +EFI_STATUS device_path_to_str(const EFI_DEVICE_PATH *dp, char16_t **ret); #if defined(__i386__) || defined(__x86_64__) bool in_hypervisor(void);