On Mon, Feb 08, 2021 at 10:43:30PM +0200, Andy Shevchenko wrote:
On Mon, Feb 8, 2021 at 10:11 PM Sakari Ailus
[off-list ref] wrote:
...
quoted
+static noinline_for_stack
+char *fourcc_string(char *buf, char *end, const u32 *fourcc,
+ struct printf_spec spec, const char *fmt)
+{
quoted
+ char output[sizeof("(xx)(xx)(xx)(xx) little-endian (0x01234567)")];
Do we have any evidence / document / standard that the above format is
what people would find good? From existing practices (I consider other
printings elsewhere and users in this series) I find '(xx)' form for
hex numbers is weird. The standard practice is to use \xHH (without
parentheses).
quoted
+ val = *fourcc & ~BIT(31);
+
+ for (i = 0; i < sizeof(*fourcc); i++) {
+ unsigned char c = val >> (i * 8);
...
quoted
+ /* Weed out spaces */
+ if (c == ' ')
+ continue;
None of the existing users does that. Why?
quoted
+ /* Print non-control ASCII characters as-is */
+ if (isascii(c) && isprint(c)) {
+ *p++ = c;
+ continue;
+ }
+
+ *p++ = '(';
+ p = hex_byte_pack(p, c);
+ *p++ = ')';
+ }
To be on constructive side, I would propose to replace above with something
like:
__le32 val;
val = cpu_to_le32(*fourcc & ~BIT(31));
p += string_escape_mem(&val, sizeof(*fourcc), output, sizeof(output), ESCAPE_NP | ESCAPE_HEX, NULL);
--
With Best Regards,
Andy Shevchenko