Re: [PATCH] checkpatch.pl: warn against using %Z

From: Joe Perches
Date: Mon Jan 09 2017 - 17:16:31 EST


On Tue, 2017-01-10 at 02:59 +0300, Alexey Dobriyan wrote:
> %Z is going to be removed in favour of %z.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx>
> ---
>
> scripts/checkpatch.pl | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -5189,6 +5189,12 @@ sub process {
> "\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr);
> last;
> }
> + # check for %Z
> + if ($string =~ /(?<!%)%[\*\d\.\$]*Z[diouxX]/) {
> + WARN("PRINTF_Z",
> + "%Z is non-standard C, use %z\n" . $herecurr);
> + last;
> + }
> if ($string =~ /0x%[\*\d\.\$\Llzth]*[udi]/) {
> ERROR("PRINTF_0xDECIMAL",
> "Prefixing 0x with decimal output is defective\n" . $herecurr);

Right concept, slightly incorrect implementation.

diouxX isn't necessary, ?<!% isn't necessary either as
there's a s/%%/__/g above it, last; probably isn't a
good idea as a single string could have both %Lu and
%Zu and unrelated, thanks for reminding me, I knew but
forgot to fix, the PRINTF_0xDECIMAL is defective as
there's a requirement that the match string only use
upper case.