diff options
author | Arvind Sankar <nivedita@alum.mit.edu> | 2020-05-18 15:07:02 -0400 |
---|---|---|
committer | Ard Biesheuvel <ardb@kernel.org> | 2020-05-19 10:31:25 +0200 |
commit | 7c30fd79168aeb83d11260246d93f8a293052007 (patch) | |
tree | 3337f0d5a9fbc1a571d90a85da00170fa3b6bd8e /drivers/firmware | |
parent | 77e48db04a02ebd00229281c26575979b0b465e0 (diff) |
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 <nivedita@alum.mit.edu>
Link: https://lore.kernel.org/r/20200518190716.751506-11-nivedita@alum.mit.edu
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Diffstat (limited to 'drivers/firmware')
-rw-r--r-- | drivers/firmware/efi/libstub/vsprintf.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/drivers/firmware/efi/libstub/vsprintf.c b/drivers/firmware/efi/libstub/vsprintf.c index 00123d5f402f..b7316ab9f8b4 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); |