changeset 2542:b544a8e32a35

Perhaps improve type definitions for MinGW v8+
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 18 Oct 2021 01:06:14 +0300
parents 671f41166527
children dea1001eb4e8
files src/dmlib.h
diffstat 1 files changed, 34 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- 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 <SDL_config.h>
 #include <SDL_endian.h>
 #include <SDL_types.h>
@@ -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"