[PATCH 090/112] vsprintf: add %pD for printing EFI device path
Sascha Hauer
sha at pengutronix.de
Mon Jan 8 01:01:54 PST 2024
On Wed, Jan 03, 2024 at 07:12:50PM +0100, Ahmad Fatoum wrote:
> We already have a few users that will want to print EFI device paths and
> will gain quite a few more with incoming loader support, so let's allow
> printing them directly with printf with the %pD format specifier.
>
> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
> ---
> lib/vsprintf.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index ea092c06d3d6..e41a1abee652 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -20,6 +20,7 @@
> #include <kallsyms.h>
> #include <wchar.h>
> #include <of.h>
> +#include <efi.h>
>
> #include <common.h>
> #include <pbl.h>
> @@ -348,6 +349,15 @@ char *uuid_string(char *buf, const char *end, const u8 *addr, int field_width,
> return string(buf, end, uuid, field_width, precision, flags);
> }
>
> +static char *device_path_string(char *buf, const char *end, const struct efi_device_path *dp,
> + int field_width, int precision, int flags)
> +{
> + if (!dp)
> + return string(buf, end, NULL, field_width, precision, flags);
> +
> + return buf + device_path_to_str_buf(dp, buf, end - buf);
> +}
> +
> static noinline_for_stack
> char *hex_string(char *buf, const char *end, const u8 *addr, int field_width,
> int precision, int flags, const char *fmt)
> @@ -519,6 +529,10 @@ static char *pointer(const char *fmt, char *buf, const char *end, const void *pt
> case 'J':
> if (fmt[1] == 'P' && IS_ENABLED(CONFIG_JSMN))
> return jsonpath_string(buf, end, ptr, field_width, precision, flags, fmt);
> + case 'D':
> + if (IS_ENABLED(CONFIG_EFI_DEVICEPATH))
> + return device_path_string(buf, end, ptr, field_width, precision, flags);
> + break;
Linux uses 'D' to print a filename from a struct file. This might become
useful for barebox as well, so we might better choose a different letter
here.
Otherwise I think it's ok to introduce barebox specific pointer types in
our printf implementation, even when they conflict with ones from the
kernel, but we should update the comment above this function accordingly
and clearly state when a letter is barebox specific.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list