[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [patch] Use inttypes macros for size_t format string
[Thread Prev] | [Thread Next]
- Subject: Re: [patch] Use inttypes macros for size_t format string
- From: g4-lisz@xxxxxxxxxxxx
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 22 Jan 2020 13:56:20 +0100
- To: libssh@xxxxxxxxxx
On 22.01.20 12:25, Tilo Eckert wrote: > Am 22.01.2020 um 08:49 schrieb Andreas Schneider: >> On Thursday, 16 January 2020 12:55:07 CET g4-lisz@xxxxxxxxxxxx wrote: >>>>> According to that you need to compile with: >>>>> >>>>> cmake -DCMAKE_C_FLAGS="-D__USE_MINGW_ANSI_STDIO=1" .. >>>> Alternative seems to be: >>>> >>>> -Dsnprintf=__mingw_snprintf -Dvsnprintf=__mingw_vsnprintf ... >>> Yes i was a bit overhasty with this patch... >>> >>> I also found that _POSIX_SOURCE does the trick. This would be a bit more >>> generic. >>> >>> But I realized that the binaries get bigger like that, probably because >>> they link in more of their own implementations. Not sure, if this is a >>> good thing... >>> >>> -Dsnprintf=__mingw_snprintf -Dvsnprintf=__mingw_vsnprintf looks like a >>> good compromise to me. I will also test this. >> Which route should we go? Just set _POSIX_SOURCE? >> > None of them. If you want libssh to work on Windows when built without > MinGW, %z must not be used at all. The Windows implementation of printf > does not support it. You have to use typecasts to print size_t in a > portable way. > > Defining __USE_MINGW_ANSI_STDIO directly has been deprecated and emits a > warning in newer MinGW versions: > https://osdn.net/projects/mingw/scm/git/mingw-org-wsl/commits/36fae3c324a1997356db40caa83d0fac512b9407 > > Defining one of _XOPEN_SOURCE, _POSIX_C_SOURCE or _POSIX_SOURCE > (deprecated) implicitly enables __USE_MINGW_ANSI_STDIO. MinGW replaces > the printf and scanf function families with C99 compliant versions if > any of the defines is set, leading to slightly larger binaries. However, > that would only fix it if MinGW is used... I was initially talking about compiling with MinGW... For Windows I can find documentation of "z" as supported spezifier: https://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=vs-2019#size-prefixes-for-printf-and-wprintf-format-type-specifiers But not sure since when this is supported. But anway: What is the advantage of using typecasts instead of a format spezifier macro (see my patch)? You still have to use OS specific type casts. Or I'm understanding this wrong? I really had difficulties to find out which are the official sources of MinGW. So it's not here any longer? https://sourceforge.net/p/mingw/mingw-org-wsl/ci/6.0-exp/tree/mingwrt/include/_mingw.h.in Regards, Till
Re: [patch] Use inttypes macros for size_t format string | g4-lisz@xxxxxxxxxxxx |
Re: [patch] Use inttypes macros for size_t format string | Tilo Eckert <tilo.eckert@xxxxxxx> |
[patch] Use inttypes macros for size_t format string | g4-lisz@xxxxxxxxxxxx |
Re: [patch] Use inttypes macros for size_t format string | Andreas Schneider <asn@xxxxxxxxxxxxxx> |
Re: [patch] Use inttypes macros for size_t format string | g4-lisz@xxxxxxxxxxxx |
Re: [patch] Use inttypes macros for size_t format string | Andreas Schneider <asn@xxxxxxxxxxxxxx> |
Re: [patch] Use inttypes macros for size_t format string | Tilo Eckert <tilo.eckert@xxxxxxx> |