vsprintf: Use %p4chR instead of %p4cn for reading data in reversed host ordering
authorPetr Mladek <pmladek@suse.com>
Mon, 28 Apr 2025 12:31:32 +0000 (14:31 +0200)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 29 Apr 2025 13:29:33 +0000 (09:29 -0400)
commit37eed892cc5ff36aeee59bb78f6aa417a44030a9
tree6faa6bebba93566998f3f29db72c4ed5f82d9c31
parentf2c8f90b4f676c1f860e6c2cdfe91e68fae64918
vsprintf: Use %p4chR instead of %p4cn for reading data in reversed host ordering

The generic FourCC format always prints the data using the big endian
order. It is generic because it allows to read the data using a custom
ordering.

The current code uses "n" for reading data in the reverse host ordering.
It makes the 4 variants [hnbl] consistent with the generic printing
of IPv4 addresses.

Unfortunately, it creates confusion on big endian systems. For example,
it shows the data &(u32)0x67503030 as

%p4cn 00Pg (0x30305067)

But people expect that the ordering stays the same. The network ordering
is a big-endian ordering.

The problem is that the semantic is not the same. The modifiers affect
the output ordering of IPv4 addresses while they affect the reading order
in case of FourCC code.

Avoid the confusion by replacing the "n" modifier with "hR", aka
reverse host ordering. It is inspired by the existing %p[mM]R printf
format.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Closes: https://lore.kernel.org/r/CAMuHMdV9tX=TG7E_CrSF=2PY206tXf+_yYRuacG48EWEtJLo-Q@mail.gmail.com
Signed-off-by: Petr Mladek <pmladek@suse.com>
Acked-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Aditya Garg <gargaditya08@live.com>
Link: https://lore.kernel.org/r/20250428123132.578771-1-pmladek@suse.com
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Documentation/core-api/printk-formats.rst
lib/tests/printf_kunit.c
lib/vsprintf.c