Re: [hatari-devel] printf for 64 bit value and %PRId64/ %I64d |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
]
- To: Nicolas Pomarède <npomarede@xxxxxxxxxxxx>
- Subject: Re: [hatari-devel] printf for 64 bit value and %PRId64/ %I64d
- From: Thomas Huth <th.huth@xxxxxxxxx>
- Date: Sat, 17 Jul 2021 19:06:15 +0000
- Cc: hatari-devel@xxxxxxxxxxxxxxxxxxx
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.de; s=2017; t=1626548778; bh=953WaSyBcfuiOjhDgoMxxU6Um6mFtcFEmMPqyoxzmBE=; h=Date:From:To:Cc:Subject:From; b=Q6ry1x6ny+QciRmLY22qHeBEcSHaPkJBOj97Fl6XqCCP+ZlgtNEJJ0pBlMZk+qVvq xdGCSt4limOCCiwv1g6vscrIJtiyYmSM98W5jRf81I6Z+cYloY+ixK9kBdYUV0Yulg 5TUzwLZU47/Qxq6B3Oc5DTPd1obnD96v8nTqTN8KF7MQ5FlzL4ls/p63f6YcokryW6 hRBaWaY9mqlwhcWhrT2ECNjkqwEfV1HlfjGXzZJm5rcj88hU+aXGo/iGO9+XIGDiNb +MvJLVtStxl+6SD5gKm7Mgl9WcVv7MNwV9U+0FIkDv06pA/BrGi9BoenJzv5s/cBEf bYTbopKgvHWYQ==
Am Sat, 17 Jul 2021 17:25:33 +0200
schrieb Nicolas Pomarède <npomarede@xxxxxxxxxxxx>:
> Hi
>
> it seems that with recent version of mingw/gcc that I'm using there's
> now an error when using the portable %PRId64 macro to print 64 bit
> integer and crosscompiling under linux to do a Windows build :
>
>
> /home/npomarede/src/win/src/gemdos.c: In function
> 'restore_file_handle_info':
> /home/npomarede/src/win/src/gemdos.c:891:24: warning: unknown
> conversion type character 'l' in format [-Wformat=]
> 891 | Log_Printf(LOG_WARN, "GEMDOS '%s' handle %d cannot be
> restored, seek to saved offset %"PRId64" failed for: %s\n",
> |
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from /home/npomarede/src/win/src/gemdos.c:42:
> /usr/x86_64-w64-mingw32/sys-root/mingw/include/inttypes.h:33:18:
> note: format string is defined here
> 33 | #define PRId64 "lld"
> | ^
>
> One possible fix for this is to do :
>
> #define PRId64 "I64d"
>
> only when compiling for windows (as %I64d seems to be more supported
> under Windows)
>
> Any other idea how to fix this in the most clean/secure way ?
IIRC I once hit this problem already, too, when the Fedora container in
the gitlab-CI got upgraded to F34 (see commit 89ce85e772bc5ccd1) ... I
had a look at it, but did not come to a clean solution. I think it has
something to do with MinGW supporting both, the printf-style functions
from the MS runtime, and the C99-style macros, at the same time.
I did not find a clean solution back then and simply downgraded the
container to F33 to "fix" it. But I think you could try playing with
__attribut__((format(gnu_printf, 2, 3))) instead of the normal "printf"
attribute - but beware, it might not be supported by Clang. Or maybe
check the __USE_MINGW_ANSI_STDIO define ... but I think it also did not
work for me back then.
Alternatively cast the value to (long) and use "%l" instead (if
it's unlikely that the value is bigger than 32-bit)?
Thomas