
On 08/10/2017 01:14 AM, Rob Clark wrote:
This works (roughly) the same way as linux's, but we currently always print lower-case (ie. we just keep %pUB and %pUL for compat with linux), mostly just because that is what uuid_bin_to_str() supports.
%pUb: 01020304-0506-0708-090a-0b0c0d0e0f10 %pUl: 04030201-0605-0807-090a-0b0c0d0e0f10
It will be used by a later efi_loader paths for efi variables and for device-path-to-text protocol, and also quite useful for debug prints of protocol GUIDs.
Signed-off-by: Rob Clark robdclark@gmail.com
examples/api/Makefile | 1 + include/config_fallbacks.h | 1 + lib/vsprintf.c | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/examples/api/Makefile b/examples/api/Makefile index 87c15d0f68..899527267d 100644 --- a/examples/api/Makefile +++ b/examples/api/Makefile @@ -35,6 +35,7 @@ EXT_COBJ-y += lib/string.o EXT_COBJ-y += lib/time.o EXT_COBJ-y += lib/vsprintf.o EXT_COBJ-y += lib/charset.o +EXT_COBJ-$(CONFIG_LIB_UUID) += lib/uuid.o EXT_SOBJ-$(CONFIG_PPC) += arch/powerpc/lib/ppcstring.o ifeq ($(ARCH),arm) EXT_SOBJ-$(CONFIG_USE_ARCH_MEMSET) += arch/arm/lib/memset.o diff --git a/include/config_fallbacks.h b/include/config_fallbacks.h index 961a83d758..56b9de09f2 100644 --- a/include/config_fallbacks.h +++ b/include/config_fallbacks.h @@ -57,6 +57,7 @@
#if (CONFIG_IS_ENABLED(PARTITION_UUIDS) || \ CONFIG_IS_ENABLED(EFI_PARTITION) || \
- CONFIG_IS_ENABLED(EFI_LOADER) || \ defined(CONFIG_RANDOM_UUID) || \ defined(CONFIG_CMD_UUID) || \ defined(CONFIG_BOOTP_PXE)) && \
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 0678b49b01..71a995dee0 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -18,6 +18,7 @@
#include <common.h> #include <charset.h> +#include <uuid.h>
#include <div64.h> #define noinline __attribute__((noinline)) @@ -366,6 +367,40 @@ static char *ip4_addr_string(char *buf, char *end, u8 *addr, int field_width, } #endif
+#ifdef CONFIG_LIB_UUID +/*
- This works (roughly) the same way as linux's, but we currently always
- print lower-case (ie. we just keep %pUB and %pUL for compat with linux),
- mostly just because that is what uuid_bin_to_str() supports.
- %pUb: 01020304-0506-0708-090a-0b0c0d0e0f10
- %pUl: 04030201-0605-0807-090a-0b0c0d0e0f10
- */
+static char *uuid_string(char *buf, char *end, u8 *addr, int field_width,
int precision, int flags, const char *fmt)
+{
- char uuid[UUID_STR_LEN + 1];
- int str_format = UUID_STR_FORMAT_STD;
- switch (*(++fmt)) {
- case 'L':
- case 'l':
str_format = UUID_STR_FORMAT_GUID;
break;
- case 'B':
- case 'b':
/* this is the default */
break;
- default:
break;
- }
- uuid_bin_to_str(addr, uuid, str_format);
- return string(buf, end, uuid, field_width, precision, flags);
+} +#endif
/*
- Show a '%p' thing. A kernel extension is that the '%p' is followed
- by an extra set of alphanumeric characters that are extended format
@@ -399,8 +434,8 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, flags); #endif
-#ifdef CONFIG_CMD_NET switch (*fmt) { +#ifdef CONFIG_CMD_NET case 'a': flags |= SPECIAL | ZEROPAD;
@@ -430,8 +465,15 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, precision, flags); flags &= ~SPECIAL; break;
- }
#endif +#ifdef CONFIG_LIB_UUID
- case 'U':
return uuid_string(buf, end, ptr, field_width, precision,
flags, fmt);
+#endif
- default:
break;
- } flags |= SMALL; if (field_width == -1) { field_width = 2*sizeof(void *);
Successfully tested printing using %pUl with a patch under development on arm64.
Tested-by: Heinrich Schuchardt xypron.glpk@gmx.de