# HG changeset patch # User Matti Hamalainen # Date 1634508374 -10800 # Node ID b544a8e32a35b845bdf3bff48cb49a22354d8997 # Parent 671f41166527c174d7a827fc0cb62fae514bad8d Perhaps improve type definitions for MinGW v8+ diff -r 671f41166527 -r b544a8e32a35 src/dmlib.h --- a/src/dmlib.h Tue Jul 27 08:56:41 2021 +0300 +++ b/src/dmlib.h Mon Oct 18 01:06:14 2021 +0300 @@ -7,6 +7,12 @@ #ifndef DMLIB_H #define DMLIB_H +// Meh, this is a hack due to the crap non-portability of 64bit +// printf PRI* type specifiers/modifiers +#if !defined(DM_USE_BONK_TYPES) && (defined(__MINGW32__) || defined(__MINGW64__)) +# define __USE_MINGW_ANSI_STDIO 1 +#endif + #include #include #include @@ -64,7 +70,7 @@ // Kludge, as MinGW64 cross-compiler does not like certain printf() format specifiers -#if defined(__MINGW64__) +#if defined(__MINGW32__) || defined(__MINGW64__) # define DM_ATTR_PRINTF_FMT(xstart, xend) #else # define DM_ATTR_PRINTF_FMT(xstart, xend) __attribute__ ((__format__ (__printf__, (xstart), (xend)))) @@ -73,32 +79,39 @@ // Do we have a valid arch? // If so, set some printf specifiers -#define DM_PRIu32 PRIu32 -#define DM_PRId32 PRId32 -#define DM_PRIx32 PRIx32 -#define DM_PRIX32 PRIX32 - -#define DM_PRIu64 PRIu64 -#define DM_PRId64 PRId64 -#define DM_PRIx64 PRIx64 -#define DM_PRIX64 PRIX64 - #if DM_ARCH == 32 +# define DM_PRIu32 PRIu32 +# define DM_PRId32 PRId32 +# define DM_PRIx32 PRIx32 +# define DM_PRIX32 PRIX32 +# ifdef TH_USE_BONK_TYPES +# define DM_PRIu64 "lld" +# define DM_PRId64 "lld" +# define DM_PRIx64 "llx" +# define DM_PRIX64 "llX" +# define DM_PRId_OFF_T "ld" +# define DM_PRIx_OFF_T "lx" +# define DM_PRIX_OFF_T "lX" +# else +# define DM_PRIu64 PRIu64 +# define DM_PRId64 PRId64 +# define DM_PRIx64 PRIx64 +# define DM_PRIX64 PRIX64 +# define DM_PRId_OFF_T PRId32 +# define DM_PRIx_OFF_T PRIx32 +# define DM_PRIX_OFF_T PRIX32 +# endif # define DM_PRIu_SIZE_T PRIu32 # define DM_PRId_SSIZE_T PRId32 # define DM_PRIx_SIZE_T PRIx32 # define DM_PRIX_SIZE_T PRIX32 -# ifdef DM_PLAT_WINDOWS -# define DM_PRId_OFF_T "ld" -# define DM_PRIx_OFF_T "lx" -# define DM_PRIX_OFF_T "lX" -# else -# define DM_PRId_OFF_T PRId32 -# define DM_PRIx_OFF_T PRIx32 -# define DM_PRIX_OFF_T PRIX32 -# endif + #elif DM_ARCH == 64 -# ifdef DM_PLAT_WINDOWS // Unsure if this is MinGW64 only thing? +# define DM_PRIu64 PRIu64 +# define DM_PRId64 PRId64 +# define DM_PRIx64 PRIx64 +# define DM_PRIX64 PRIX64 +# ifdef TH_USE_BONK_TYPES # define DM_PRIu_SIZE_T "I64u" # define DM_PRId_SSIZE_T "I64d" # define DM_PRIx_SIZE_T "I64x"