On Mon, Feb 08, 2021 at 10:43:30PM +0200, Andy Shevchenko wrote:
On Mon, Feb 8, 2021 at 10:11 PM Sakari Ailus sakari.ailus@linux.intel.com wrote:
...
+static noinline_for_stack +char *fourcc_string(char *buf, char *end, const u32 *fourcc,
struct printf_spec spec, const char *fmt)
+{
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).
val = *fourcc & ~BIT(31);
for (i = 0; i < sizeof(*fourcc); i++) {
unsigned char c = val >> (i * 8);
...
/* Weed out spaces */
if (c == ' ')
continue;
None of the existing users does that. Why?
/* 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);