2021-05-14 18:53:51

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] iio: si1133: fix format string warnings

From: Arnd Bergmann <[email protected]>

clang complains about multiple instances of printing an integer
using the %hhx format string:

drivers/iio/light/si1133.c:982:4: error: format specifies type 'unsigned char' but the argument has type 'unsigned int' [-Werror,-Wformat]
part_id, rev_id, mfr_id);
^~~~~~~

Print them as a normal integer instead, leaving the "#02"
length modifier.

Fixes: e01e7eaf37d8 ("iio: light: introduce si1133")
Signed-off-by: Arnd Bergmann <[email protected]>
---
drivers/iio/light/si1133.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/light/si1133.c b/drivers/iio/light/si1133.c
index c280b4195003..fd302480262b 100644
--- a/drivers/iio/light/si1133.c
+++ b/drivers/iio/light/si1133.c
@@ -978,11 +978,11 @@ static int si1133_validate_ids(struct iio_dev *iio_dev)
return err;

dev_info(&iio_dev->dev,
- "Device ID part %#02hhx rev %#02hhx mfr %#02hhx\n",
+ "Device ID part %#02x rev %#02x mfr %#02x\n",
part_id, rev_id, mfr_id);
if (part_id != SI1133_PART_ID) {
dev_err(&iio_dev->dev,
- "Part ID mismatch got %#02hhx, expected %#02x\n",
+ "Part ID mismatch got %#02x, expected %#02x\n",
part_id, SI1133_PART_ID);
return -ENODEV;
}
--
2.29.2



2021-05-14 20:10:25

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] iio: si1133: fix format string warnings

On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> From: Arnd Bergmann <[email protected]>
>
> clang complains about multiple instances of printing an integer
> using the %hhx format string:
>
> drivers/iio/light/si1133.c:982:4: error: format specifies type 'unsigned char' but the argument has type 'unsigned int' [-Werror,-Wformat]
> part_id, rev_id, mfr_id);
> ^~~~~~~
>
> Print them as a normal integer instead, leaving the "#02"
> length modifier.
>
> Fixes: e01e7eaf37d8 ("iio: light: introduce si1133")
> Signed-off-by: Arnd Bergmann <[email protected]>

Indeed, use of %hx and %hhx have been discouraged since commit
cbacb5ab0aa0 ("docs: printk-formats: Stop encouraging use of unnecessary
%h[xudi] and %hh[xudi]").

Reviewed-by: Nathan Chancellor <[email protected]>

> ---
> drivers/iio/light/si1133.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/light/si1133.c b/drivers/iio/light/si1133.c
> index c280b4195003..fd302480262b 100644
> --- a/drivers/iio/light/si1133.c
> +++ b/drivers/iio/light/si1133.c
> @@ -978,11 +978,11 @@ static int si1133_validate_ids(struct iio_dev *iio_dev)
> return err;
>
> dev_info(&iio_dev->dev,
> - "Device ID part %#02hhx rev %#02hhx mfr %#02hhx\n",
> + "Device ID part %#02x rev %#02x mfr %#02x\n",
> part_id, rev_id, mfr_id);
> if (part_id != SI1133_PART_ID) {
> dev_err(&iio_dev->dev,
> - "Part ID mismatch got %#02hhx, expected %#02x\n",
> + "Part ID mismatch got %#02x, expected %#02x\n",
> part_id, SI1133_PART_ID);
> return -ENODEV;
> }
>


2021-05-16 10:28:16

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH] iio: si1133: fix format string warnings

On Fri, 14 May 2021 10:45:02 -0700
Nathan Chancellor <[email protected]> wrote:

> On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> > From: Arnd Bergmann <[email protected]>
> >
> > clang complains about multiple instances of printing an integer
> > using the %hhx format string:
> >
> > drivers/iio/light/si1133.c:982:4: error: format specifies type 'unsigned char' but the argument has type 'unsigned int' [-Werror,-Wformat]
> > part_id, rev_id, mfr_id);
> > ^~~~~~~
> >
> > Print them as a normal integer instead, leaving the "#02"
> > length modifier.
> >
> > Fixes: e01e7eaf37d8 ("iio: light: introduce si1133")
> > Signed-off-by: Arnd Bergmann <[email protected]>
>
> Indeed, use of %hx and %hhx have been discouraged since commit
> cbacb5ab0aa0 ("docs: printk-formats: Stop encouraging use of unnecessary
> %h[xudi] and %hh[xudi]").
>
> Reviewed-by: Nathan Chancellor <[email protected]>

Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to poke at it.

Thanks,

Jonathan
>
> > ---
> > drivers/iio/light/si1133.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/iio/light/si1133.c b/drivers/iio/light/si1133.c
> > index c280b4195003..fd302480262b 100644
> > --- a/drivers/iio/light/si1133.c
> > +++ b/drivers/iio/light/si1133.c
> > @@ -978,11 +978,11 @@ static int si1133_validate_ids(struct iio_dev *iio_dev)
> > return err;
> >
> > dev_info(&iio_dev->dev,
> > - "Device ID part %#02hhx rev %#02hhx mfr %#02hhx\n",
> > + "Device ID part %#02x rev %#02x mfr %#02x\n",
> > part_id, rev_id, mfr_id);
> > if (part_id != SI1133_PART_ID) {
> > dev_err(&iio_dev->dev,
> > - "Part ID mismatch got %#02hhx, expected %#02x\n",
> > + "Part ID mismatch got %#02x, expected %#02x\n",
> > part_id, SI1133_PART_ID);
> > return -ENODEV;
> > }
> >
>


2021-05-27 18:35:50

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] iio: si1133: fix format string warnings

On Sun, 2021-05-16 at 10:36 +0100, Jonathan Cameron wrote:
> On Fri, 14 May 2021 10:45:02 -0700
> Nathan Chancellor <[email protected]> wrote:
> > On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> > > From: Arnd Bergmann <[email protected]>
> > >
> > > clang complains about multiple instances of printing an integer
> > > using the %hhx format string:
> > >
> > > drivers/iio/light/si1133.c:982:4: error: format specifies type 'unsigned char' but the argument has type 'unsigned int' [-Werror,-Wformat]
> > > ??????????????????part_id, rev_id, mfr_id);
> > > ??????????????????^~~~~~~
> > >
> > > Print them as a normal integer instead, leaving the "#02"
> > > length modifier.
[]
> > > diff --git a/drivers/iio/light/si1133.c b/drivers/iio/light/si1133.c
[]
> > > @@ -978,11 +978,11 @@ static int si1133_validate_ids(struct iio_dev *iio_dev)
> > > ?? return err;
> > > ??
> > >
> > > ?? dev_info(&iio_dev->dev,
> > > - "Device ID part %#02hhx rev %#02hhx mfr %#02hhx\n",
> > > + "Device ID part %#02x rev %#02x mfr %#02x\n",
> > > ?? part_id, rev_id, mfr_id);
> > > ?? if (part_id != SI1133_PART_ID) {
> > > ?? dev_err(&iio_dev->dev,
> > > - "Part ID mismatch got %#02hhx, expected %#02x\n",
> > > + "Part ID mismatch got %#02x, expected %#02x\n",

which is almost certainly wrong.
the length specification includes the # which is already 2 bytes.

Likely these should be 0x%02x

> > > ?? part_id, SI1133_PART_ID);


2021-05-28 21:13:38

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] iio: si1133: fix format string warnings

On Fri, 2021-05-28 at 23:59 +0300, Andy Shevchenko wrote:
> On Thursday, May 27, 2021, Joe Perches <[email protected]> wrote:
> > On Sun, 2021-05-16 at 10:36 +0100, Jonathan Cameron wrote:
> > > On Fri, 14 May 2021 10:45:02 -0700
> > > Nathan Chancellor <[email protected]> wrote:
> > > > On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> > > > > From: Arnd Bergmann <[email protected]>
> > > > >
> > > > > clang complains about multiple instances of printing an integer
> > > > > using the %hhx format string:
> > > > >
> > > > > drivers/iio/light/si1133.c:982:4: error: format specifies type
> > 'unsigned char' but the argument has type 'unsigned int' [-Werror,-Wformat]
> > > > >                   part_id, rev_id, mfr_id);
> > > > >                   ^~~~~~~
> > > > >
> > > > > Print them as a normal integer instead, leaving the "#02"
> > > > > length modifier.
> > []
> > > > > diff --git a/drivers/iio/light/si1133.c b/drivers/iio/light/si1133.c
> > []
> > > > > @@ -978,11 +978,11 @@ static int si1133_validate_ids(struct iio_dev
> > *iio_dev)
> > > > >                   return err;
> > > > >
> > > > >
> > > > >           dev_info(&iio_dev->dev,
> > > > > - "Device ID part %#02hhx rev %#02hhx mfr %#02hhx\n",
> > > > > + "Device ID part %#02x rev %#02x mfr %#02x\n",
> > > > >                    part_id, rev_id, mfr_id);
> > > > >           if (part_id != SI1133_PART_ID) {
> > > > >                   dev_err(&iio_dev->dev,
> > > > > - "Part ID mismatch got %#02hhx, expected %#02x\n",
> > > > > + "Part ID mismatch got %#02x, expected %#02x\n",
> >
> > which is almost certainly wrong.
> > the length specification includes the # which is already 2 bytes.
> >
> > Likely these should be 0x%02x
>
> What’s the difference (except printing 0)?

(assuming the argument is unsigned char/u8)

%#02x will always emit more than the specified length (3 or 4 chars)
values < 16 are 0x<hexdigit>, values >= 16 are 0x<hexdigit><hexdigit>

0x%02x will always emit 4 chars

It's very likely the writer didn't know the difference and assumed
that the # did not count in the specified width.


2021-05-28 21:37:12

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] iio: si1133: fix format string warnings

On Sat, 2021-05-29 at 00:16 +0300, Andy Shevchenko wrote:
> On Saturday, May 29, 2021, Joe Perches <[email protected]> wrote:
[]
> > > > Likely these should be 0x%02x
> > >
> > > What’s the difference (except printing 0)?
> >
> > (assuming the argument is unsigned char/u8)
> >
> > %#02x will always emit more than the specified length (3 or 4 chars)
> > values < 16 are 0x<hexdigit>, values >= 16 are 0x<hexdigit><hexdigit>
>
> 0 will be 0, btw.

Hey Andy. Right.

> > 0x%02x will always emit 4 chars
>
> *Minimum* or at least 4 characters. There is an upper limit of sizeof(int)
> * 2 + 2.

I did write assuming the argument is unsigned char/u8.
For the general unsigned int arg case, you are of course correct.


2021-05-29 07:56:35

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH] iio: si1133: fix format string warnings

On Sat, May 29, 2021 at 12:35 AM Joe Perches <[email protected]> wrote:
> On Sat, 2021-05-29 at 00:16 +0300, Andy Shevchenko wrote:
> > On Saturday, May 29, 2021, Joe Perches <[email protected]> wrote:

...

> > > > > Likely these should be 0x%02x
> > > >
> > > > What’s the difference (except printing 0)?
> > >
> > > (assuming the argument is unsigned char/u8)
> > >
> > > %#02x will always emit more than the specified length (3 or 4 chars)
> > > values < 16 are 0x<hexdigit>, values >= 16 are 0x<hexdigit><hexdigit>
> >
> > 0 will be 0, btw.
>
> Hey Andy. Right.
>
> > > 0x%02x will always emit 4 chars
> >
> > *Minimum* or at least 4 characters. There is an upper limit of sizeof(int)
> > * 2 + 2.
>
> I did write assuming the argument is unsigned char/u8.
> For the general unsigned int arg case, you are of course correct.

Signed char also. Basically for all signed types and unsigned int cases.

--
With Best Regards,
Andy Shevchenko