Re: [PATCH v4 7/9] vsprintf: Factor out %pO handler as kobject_string()

From: Sergey Senozhatsky
Date: Wed Apr 04 2018 - 19:35:23 EST


On (04/04/18 10:58), Petr Mladek wrote:
> static noinline_for_stack
> +char *kobject_string(char *buf, char *end, void *ptr,
> + struct printf_spec spec, const char *fmt)
> +{
> + switch (fmt[1]) {
> + case 'F':
> + return device_node_string(buf, end, ptr, spec, fmt + 1);
> + }
> +
> + WARN_ONCE(1, "Unsupported pointer format specifier: %%pO%c\n", fmt[1]);
> + return buf;
> +}
> +
> +static noinline_for_stack
> char *pointer_string(char *buf, char *end, const void *ptr,
> struct printf_spec spec)
> {
> @@ -1982,10 +1995,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
> case 'G':
> return flags_string(buf, end, ptr, fmt);
> case 'O':
> - switch (fmt[1]) {
> - case 'F':
> - return device_node_string(buf, end, ptr, spec, fmt + 1);
> - }
> + return kobject_string(buf, end, ptr, spec, fmt);
> case 'x':
> return pointer_string(buf, end, ptr, spec);
> }

So, previously, unsupported 'O' would end up in ptr_to_id()

case 'O':
switch (fmt[1]) {
case 'F':
return device_node_string()
}
}

return ptr_to_id();



now we will just return `buf' without doing ptr_to_id()?

case 'O':
return kobject_string(); // which does device_node_string()
// for fmt 'O' or return buf
// for unknown fmt.
}

return ptr_to_id();


Was this your intention?

-ss