Re: [PATCH] yavta: Format type errors for non x86 arches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sakari

On Tue, 19 Sept 2023 at 22:07, Sakari Ailus <sakari.ailus@xxxxxx> wrote:
>
> Hi Ricardo,
>
> Thanks for the patch.
>
> On Tue, Sep 19, 2023 at 04:01:23PM +0200, Ricardo Ribalda wrote:
> > mipsel64el, ppc64el, ia64, ppc64, sparc64 and x32 have different lenghts
> > for long long ints, which result in some compilation errors.
> >
> > Lets add some castings to help the compiler deal with this.
> >
> > We cannot use the Format macro constants ffrom inttypes because they
> > seem to not be compatible with kernel (__u64 et al) types.
> >
> > Signed-off-by: Ricardo Ribalda <ricardo@xxxxxxxxxxx>
> > ---
> >  yavta.c | 35 +++++++++++++++++++++--------------
> >  1 file changed, 21 insertions(+), 14 deletions(-)
> >
> > diff --git a/yavta.c b/yavta.c
> > index d562863..bf54e4f 100644
> > --- a/yavta.c
> > +++ b/yavta.c
> > @@ -1313,7 +1313,8 @@ static void video_query_menu(struct device *dev,
> >                       printf("  %u: %.32s%s\n", menu.index, menu.name,
> >                              menu.index == value ? " (*)" : "");
> >               else
> > -                     printf("  %u: %lld%s\n", menu.index, menu.value,
> > +                     printf("  %u: %lld%s\n", menu.index,
>
> Could you instead use PRId64 for this? You can avoid casting to another
> type this way. Same for the other cases.

Already tried this:

@@ -1313,7 +1313,7 @@ static void video_query_menu(struct device *dev,
                        printf("  %u: %.32s%s\n", menu.index, menu.name,
                               menu.index == value ? " (*)" : "");
                else
-                       printf("  %u: %lld%s\n", menu.index, menu.value,
+                       printf("  %u: %" PRId64 "%s\n", menu.index, menu.value,
                               menu.index == value ? " (*)" : "");
        };
 }

but gcc was not happy:

yavta.c: In function ‘video_query_menu’:
yavta.c:1316:11: warning: format ‘%ld’ expects argument of type ‘long
int’, but argument 3 has type ‘__s64’ {aka ‘long long int’}
[-Wformat=]
 1316 |    printf("  %u: %" PRId64 "%s\n", menu.index, menu.value,
      |           ^~~~~~~~~                            ~~~~~~~~~~
      |                                                    |
      |                                                    __s64 {aka
long long int}
In file included from yavta.c:26:
/usr/include/inttypes.h:57:34: note: format string is defined here
   57 | # define PRId64  __PRI64_PREFIX "d"

So I took the shotgun and fixed it with castings :)


>
> > +                            (long long)menu.value,
> >                              menu.index == value ? " (*)" : "");
> >       };
> >  }
>
> --
> Regards,
>
> Sakari Ailus



-- 
Ricardo Ribalda




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux