From: Arvind Sankar Date: Mon, 18 May 2020 19:07:02 +0000 (-0400) Subject: efi/printf: Merge 'p' with the integer formats X-Git-Tag: v5.8-rc1~223^2~1^2~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c30fd79168aeb83d11260246d93f8a293052007;p=thirdparty%2Fkernel%2Flinux.git efi/printf: Merge 'p' with the integer formats Treat 'p' as a hexadecimal integer with precision equal to the number of digits in void *. Signed-off-by: Arvind Sankar Link: https://lore.kernel.org/r/20200518190716.751506-11-nivedita@alum.mit.edu Signed-off-by: Ard Biesheuvel --- diff --git a/drivers/firmware/efi/libstub/vsprintf.c b/drivers/firmware/efi/libstub/vsprintf.c index 00123d5f402f6..b7316ab9f8b49 100644 --- a/drivers/firmware/efi/libstub/vsprintf.c +++ b/drivers/firmware/efi/libstub/vsprintf.c @@ -297,9 +297,6 @@ int vsprintf(char *buf, const char *fmt, va_list args) } } - /* default base */ - base = 10; - switch (*fmt) { case 'c': if (!(flags & LEFT)) @@ -323,21 +320,15 @@ int vsprintf(char *buf, const char *fmt, va_list args) *str++ = ' '; continue; - case 'p': - if (field_width == -1) { - field_width = 2 * sizeof(void *); - flags |= ZEROPAD; - } - str = number(str, - (unsigned long)va_arg(args, void *), 16, - field_width, precision, flags); - continue; - /* integer number formats - set up the flags and "break" */ case 'o': base = 8; break; + case 'p': + if (precision < 0) + precision = 2 * sizeof(void *); + fallthrough; case 'x': flags |= SMALL; fallthrough; @@ -350,6 +341,7 @@ int vsprintf(char *buf, const char *fmt, va_list args) flags |= SIGN; fallthrough; case 'u': + base = 10; break; default: @@ -360,7 +352,9 @@ int vsprintf(char *buf, const char *fmt, va_list args) --fmt; continue; } - if (flags & SIGN) { + if (*fmt == 'p') { + num = (unsigned long)va_arg(args, void *); + } else if (flags & SIGN) { switch (qualifier) { case 'L': num = va_arg(args, long long);