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