[PATCH 090/112] vsprintf: add %pD for printing EFI device path
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Mar 4 09:26:11 PST 2024
Hello Sascha,
On 08.01.24 10:01, Sascha Hauer wrote:
> 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.
We can use 'd' along with f->f_path.dentry for that when we need to.
Another letter may conflict in future with something else that we want.
I would prefer to use 'D' as that's what U-Boot does and it avoids needless
churn for the UEFI code.
> 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.
I can do that.
Thanks,
Ahmad
>
> 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