diff mbox series

iio: si1133: fix format string warnings

Message ID 20210514135927.2926482-1-arnd@kernel.org (mailing list archive)
State New, archived
Headers show
Series iio: si1133: fix format string warnings | expand

Commit Message

Arnd Bergmann May 14, 2021, 1:59 p.m. UTC
From: Arnd Bergmann <arnd@arndb.de>

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 <arnd@arndb.de>
---
 drivers/iio/light/si1133.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Nathan Chancellor May 14, 2021, 5:45 p.m. UTC | #1
On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> 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 <arnd@arndb.de>

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 <nathan@kernel.org>

> ---
>   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;
>   	}
>
Jonathan Cameron May 16, 2021, 9:36 a.m. UTC | #2
On Fri, 14 May 2021 10:45:02 -0700
Nathan Chancellor <nathan@kernel.org> wrote:

> On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> > From: Arnd Bergmann <arnd@arndb.de>
> > 
> > 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 <arnd@arndb.de>  
> 
> 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 <nathan@kernel.org>

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;
> >   	}
> >   
>
Joe Perches May 27, 2021, 4:17 p.m. UTC | #3
On Sun, 2021-05-16 at 10:36 +0100, Jonathan Cameron wrote:
> On Fri, 14 May 2021 10:45:02 -0700
> Nathan Chancellor <nathan@kernel.org> wrote:
> > On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> > > From: Arnd Bergmann <arnd@arndb.de>
> > > 
> > > 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);
Joe Perches May 28, 2021, 9:10 p.m. UTC | #4
On Fri, 2021-05-28 at 23:59 +0300, Andy Shevchenko wrote:
> On Thursday, May 27, 2021, Joe Perches <joe@perches.com> wrote:
> > On Sun, 2021-05-16 at 10:36 +0100, Jonathan Cameron wrote:
> > > On Fri, 14 May 2021 10:45:02 -0700
> > > Nathan Chancellor <nathan@kernel.org> wrote:
> > > > On 5/14/2021 6:59 AM, Arnd Bergmann wrote:
> > > > > From: Arnd Bergmann <arnd@arndb.de>
> > > > > 
> > > > > 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.
Joe Perches May 28, 2021, 9:35 p.m. UTC | #5
On Sat, 2021-05-29 at 00:16 +0300, Andy Shevchenko wrote:
> On Saturday, May 29, 2021, Joe Perches <joe@perches.com> 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.
Andy Shevchenko May 29, 2021, 7:52 a.m. UTC | #6
On Sat, May 29, 2021 at 12:35 AM Joe Perches <joe@perches.com> wrote:
> On Sat, 2021-05-29 at 00:16 +0300, Andy Shevchenko wrote:
> > On Saturday, May 29, 2021, Joe Perches <joe@perches.com> 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.
diff mbox series

Patch

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;
 	}