On Thu, Oct 09, 2025 at 03:18:34PM +0800, Michael Chang via Grub-devel wrote: > Add support for the 'z' length modifier in the printf code. This allows > printing of size_t and ssize_t values using %zu, %zd and related > formats. The parser maps 'z' to the correct integer width based on > sizeof (size_t). > > Signed-off-by: Michael Chang <[email protected]> > --- > grub-core/kern/misc.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c > index 2b7922393..ff614add5 100644 > --- a/grub-core/kern/misc.c > +++ b/grub-core/kern/misc.c > @@ -26,6 +26,7 @@ > #include <grub/i18n.h> > #include <grub/types.h> > #include <grub/charset.h> > +#include <stddef.h> > > union printf_arg > { > @@ -739,6 +740,9 @@ parse_printf_arg_fmt (const char *fmt0, struct > printf_args *args, > COMPILE_TIME_ASSERT (sizeof (long) <= sizeof (long long)); > COMPILE_TIME_ASSERT (sizeof (long long) == sizeof (void *) > || sizeof (int) == sizeof (void *)); > + COMPILE_TIME_ASSERT (sizeof (size_t) == sizeof (unsigned) > + || sizeof (size_t) == sizeof (unsigned long) > + || sizeof (size_t) == sizeof (unsigned long long)); > > fmt = fmt0; > while ((c = *fmt++) != 0) > @@ -773,11 +777,17 @@ parse_printf_arg_fmt (const char *fmt0, struct > printf_args *args, > fmt++; > > c = *fmt++; > + if (c == 'z') > + { > + c = *fmt++; > + goto do_count; > + } > if (c == 'l') > c = *fmt++; > if (c == 'l') > c = *fmt++; > > + do_count: > switch (c) > { > case 'p': > @@ -874,6 +884,14 @@ parse_printf_arg_fmt (const char *fmt0, struct > printf_args *args, > continue; > } > > + if (c == 'z') > + { > + c = *fmt++; > + if (sizeof (size_t) == sizeof (unsigned long))
This... > + longfmt = 1; > + else if (sizeof (size_t) == sizeof (unsigned long long)) ... and this should be build time check... > + longfmt = 2; > + } Daniel _______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
