On Tue, Sep 19, 2023 at 08:22:57PM +0000, Sakari Ailus wrote: > Hi Ricardo, > > On Tue, Sep 19, 2023 at 10:10:41PM +0200, Ricardo Ribalda wrote: > > 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" > > I guess I should have expected this... > > I'm not sure if it'd be prettier but another option is to use the PRI* > macros and explicitly cast to a standard type. > > Using the standard types in the V4L2 header would have avoided this issue. > I wonder if there's anything to be gained by using the kernel types. The kernel has defined __s64 as signed int int for a long time now, on all architectures, at least since commit 0c79a8e29b5fcbcbfd611daf9d500cfad8370fcf Author: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> Date: Thu Jan 23 15:53:43 2014 -0800 asm/types.h: Remove include/asm-generic/int-l64.h which was merged in v3.14. According to https://buildd.debian.org/status/package.php?p=yavta, however, __s64 seems to be defined as long int on some platforms. /me is puzzled > Cc Hans, too. > > > So I took the shotgun and fixed it with castings :) > > :-) -- Regards, Laurent Pinchart