From c77859931d44c9d8688fef790aff94ca7ed4d612 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 1 Aug 2014 10:51:15 +0100 Subject: [PATCH] [efi] Print raw device path when we have no DevicePathToTextProtocol Signed-off-by: Michael Brown --- src/interface/efi/efi_debug.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/interface/efi/efi_debug.c b/src/interface/efi/efi_debug.c index da8efb1e..ea0a71de 100644 --- a/src/interface/efi/efi_debug.c +++ b/src/interface/efi/efi_debug.c @@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include +#include #include #include #include @@ -316,18 +317,31 @@ void dbg_efi_protocols ( EFI_HANDLE handle ) { const char * efi_devpath_text ( EFI_DEVICE_PATH_PROTOCOL *path ) { EFI_BOOT_SERVICES *bs = efi_systab->BootServices; static char text[256]; + void *start; + void *end; + size_t max_len; + size_t len; CHAR16 *wtext; /* Sanity checks */ - if ( ! efidpt ) { - DBG ( "[No DevicePathToText]" ); - return NULL; - } if ( ! path ) { DBG ( "[NULL DevicePath]" ); return NULL; } + /* If we have no DevicePathToText protocol then use a raw hex string */ + if ( ! efidpt ) { + DBG ( "[No DevicePathToText]" ); + start = path; + end = efi_devpath_end ( path ); + len = ( end - start ); + max_len = ( ( sizeof ( text ) - 1 /* NUL */ ) / 2 /* "xx" */ ); + if ( len > max_len ) + len = max_len; + base16_encode ( start, len, text ); + return text; + } + /* Convert path to a textual representation */ wtext = efidpt->ConvertDevicePathToText ( path, TRUE, FALSE ); if ( ! wtext )