Messages in this thread | | | Subject | Re: [PATCH] printf: add support for printing symbolic error codes | From | Rasmus Villemoes <> | Date | Sat, 31 Aug 2019 00:50:42 +0200 |
| |
On 31/08/2019 00.21, Joe Perches wrote: > On Sat, 2019-08-31 at 00:03 +0200, Rasmus Villemoes wrote: >> On 30/08/2019 23.53, Joe Perches wrote: >>>> diff --git a/lib/vsprintf.c b/lib/vsprintf.c >>> [] >>>> @@ -2178,8 +2204,6 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, >>>> return flags_string(buf, end, ptr, spec, fmt); >>>> case 'O': >>>> return kobject_string(buf, end, ptr, spec, fmt); >>>> - case 'x': >>>> - return pointer_string(buf, end, ptr, spec); >>>> } >>>> >>>> /* default is to _not_ leak addresses, hash before printing */ >>> >>> why remove this? >>> >> >> The handling of %px is moved above the test for ptr being an ERR_PTR, so >> that %px, ptr continues to be (roughly) equivalent to %08lx, (long)ptr. > > Ah. > Pity the flow of the switch/case is disrupted.
Agree, but I don't think it's that bad.
> That now deserves a separate comment.
You mean a comment like /* %px means the user explicitly wanted the pointer formatted as a hex value. */. Or do you want (the|an additional) comment somewhere inside the switch()?
> But why not just extend check_pointer_msg?
Partly because that would rely on all %p<foo> actually eventually passing ptr through to that (notably plain %p does not), partly because the way check_pointer_msg works means that it has to return a string for its caller to print - which is ok when the errcode is found, but breaks if it needs to format a decimal. It can't even snprintf() to a stack buffer and return that, because, well, you can't do that, and it would be a silly recursive snprintf anyway.
OK, so perhaps you meant check_pointer() where it might be doable, but again, with plain %p and possibly others we don't get to that.
Rasmus
| |