I added tests for these macros in my test suite here, and also ran those
tests against MSVC:
http://github.com/DavidEGrayson/intsafe

The only notable difference between this and MSVC is that the
smaller-valued macros will have type "int" because we want the C/C++
preprocessor to be able to read them.


>From fa45f75575d2b70d0fbae6345e59d6309a66fcbb Mon Sep 17 00:00:00 2001
From: David Grayson <[email protected]>
Date: Thu, 19 Feb 2026 17:07:19 -0800
Subject: [PATCH 2/2] headers/intsafe: Add missing MIN/MAX macros.

- The first block was copied from stdint.h.
- The second block was copied from limits.h, but typically GCC overrides
them
  by installing its own limits.h, so we use ifndef for these ones.
- The third block was copied from cfgmgr32.h.
- The fourth block consists of definitions that we don't have
  in any other headers.

Signed-off-by: David Grayson <[email protected]>
---
 mingw-w64-headers/include/intsafe.h | 70 +++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/mingw-w64-headers/include/intsafe.h
b/mingw-w64-headers/include/intsafe.h
index bad9f38fe..82d07ec81 100644
--- a/mingw-w64-headers/include/intsafe.h
+++ b/mingw-w64-headers/include/intsafe.h
@@ -14,6 +14,76 @@
 #include <wtypesbase.h>
 #include <specstrings.h>

+#define INT8_MIN (-128)
+#define INT16_MIN (-32768)
+#define INT32_MIN (-2147483647 - 1)
+#define INT64_MIN  (-9223372036854775807LL - 1)
+#define INT8_MAX 127
+#define INT16_MAX 32767
+#define INT32_MAX 2147483647
+#define INT64_MAX 9223372036854775807LL
+#define UINT8_MAX 255
+#define UINT16_MAX 65535
+#define UINT32_MAX 0xffffffffU
+#define UINT64_MAX 0xffffffffffffffffULL
+
+#ifndef INT_MIN
+#define INT_MIN (-2147483647 - 1)
+#endif
+#ifndef INT_MAX
+#define INT_MAX 2147483647
+#endif
+#ifndef UINT_MAX
+#define UINT_MAX 0xffffffffU
+#endif
+#ifndef LONG_MIN
+#define LONG_MIN (-2147483647L - 1)
+#endif
+#ifndef LONG_MAX
+#define LONG_MAX 2147483647L
+#endif
+#ifndef ULONG_MAX
+#define ULONG_MAX 0xffffffffUL
+#endif
+
+#define DWORD_MAX 0xFFFFFFFFUL
+#define DWORDLONG_MAX 0xFFFFFFFFFFFFFFFF
+
+#define SHORT_MIN INT16_MIN
+#define LONGLONG_MIN INT64_MIN
+#define LONG64_MIN INT64_MIN
+#define SHORT_MAX INT16_MAX
+#define LONGLONG_MAX INT64_MAX
+#define LONG64_MAX INT64_MAX
+#define BYTE_MAX UINT8_MAX
+#define WORD_MAX UINT16_MAX
+#define USHORT_MAX UINT16_MAX
+#define ULONGLONG_MAX UINT64_MAX
+#define ULONG64_MAX UINT64_MAX
+#define DWORD64_MAX UINT64_MAX
+#ifdef _WIN64
+#define INT_PTR_MIN INT64_MIN
+#define INT_PTR_MAX INT64_MAX
+#define UINT_PTR_MAX UINT64_MAX
+#define LONG_PTR_MIN INT64_MIN
+#define LONG_PTR_MAX INT64_MAX
+#define ULONG_PTR_MAX UINT64_MAX
+#else
+#define INT_PTR_MIN INT32_MIN
+#define INT_PTR_MAX INT32_MAX
+#define UINT_PTR_MAX UINT32_MAX
+#define LONG_PTR_MIN LONG_MIN
+#define LONG_PTR_MAX LONG_MAX
+#define ULONG_PTR_MAX ULONG_MAX
+#endif /* defined(_WIN64) */
+#define SSIZE_T_MIN LONG_PTR_MIN
+#define SSIZE_T_MAX LONG_PTR_MAX
+#define PTRDIFF_T_MIN INT_PTR_MIN
+#define PTRDIFF_T_MAX INT_PTR_MAX
+#define SIZE_T_MAX UINT_PTR_MAX
+#define _SIZE_T_MAX ULONG_PTR_MAX
+#define DWORD_PTR_MAX ULONG_PTR_MAX
+
 #define INTSAFE_E_ARITHMETIC_OVERFLOW ((HRESULT)0x80070216)

 #ifndef S_OK
--
2.52.0
From fa45f75575d2b70d0fbae6345e59d6309a66fcbb Mon Sep 17 00:00:00 2001
From: David Grayson <[email protected]>
Date: Thu, 19 Feb 2026 17:07:19 -0800
Subject: [PATCH 2/2] headers/intsafe: Add missing MIN/MAX macros.

- The first block was copied from stdint.h.
- The second block was copied from limits.h, but typically GCC overrides them
  by installing its own limits.h, so we use ifndef for these ones.
- The third block was copied from cfgmgr32.h.
- The fourth block consists of definitions that we don't have
  in any other headers.

Signed-off-by: David Grayson <[email protected]>
---
 mingw-w64-headers/include/intsafe.h | 70 +++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/mingw-w64-headers/include/intsafe.h 
b/mingw-w64-headers/include/intsafe.h
index bad9f38fe..82d07ec81 100644
--- a/mingw-w64-headers/include/intsafe.h
+++ b/mingw-w64-headers/include/intsafe.h
@@ -14,6 +14,76 @@
 #include <wtypesbase.h>
 #include <specstrings.h>
 
+#define INT8_MIN (-128)
+#define INT16_MIN (-32768)
+#define INT32_MIN (-2147483647 - 1)
+#define INT64_MIN  (-9223372036854775807LL - 1)
+#define INT8_MAX 127
+#define INT16_MAX 32767
+#define INT32_MAX 2147483647
+#define INT64_MAX 9223372036854775807LL
+#define UINT8_MAX 255
+#define UINT16_MAX 65535
+#define UINT32_MAX 0xffffffffU
+#define UINT64_MAX 0xffffffffffffffffULL
+
+#ifndef INT_MIN
+#define INT_MIN (-2147483647 - 1)
+#endif
+#ifndef INT_MAX
+#define INT_MAX 2147483647
+#endif
+#ifndef UINT_MAX
+#define UINT_MAX 0xffffffffU
+#endif
+#ifndef LONG_MIN
+#define LONG_MIN (-2147483647L - 1)
+#endif
+#ifndef LONG_MAX
+#define LONG_MAX 2147483647L
+#endif
+#ifndef ULONG_MAX
+#define ULONG_MAX 0xffffffffUL
+#endif
+
+#define DWORD_MAX 0xFFFFFFFFUL
+#define DWORDLONG_MAX 0xFFFFFFFFFFFFFFFF
+
+#define SHORT_MIN INT16_MIN
+#define LONGLONG_MIN INT64_MIN
+#define LONG64_MIN INT64_MIN
+#define SHORT_MAX INT16_MAX
+#define LONGLONG_MAX INT64_MAX
+#define LONG64_MAX INT64_MAX
+#define BYTE_MAX UINT8_MAX
+#define WORD_MAX UINT16_MAX
+#define USHORT_MAX UINT16_MAX
+#define ULONGLONG_MAX UINT64_MAX
+#define ULONG64_MAX UINT64_MAX
+#define DWORD64_MAX UINT64_MAX
+#ifdef _WIN64
+#define INT_PTR_MIN INT64_MIN
+#define INT_PTR_MAX INT64_MAX
+#define UINT_PTR_MAX UINT64_MAX
+#define LONG_PTR_MIN INT64_MIN
+#define LONG_PTR_MAX INT64_MAX
+#define ULONG_PTR_MAX UINT64_MAX
+#else
+#define INT_PTR_MIN INT32_MIN
+#define INT_PTR_MAX INT32_MAX
+#define UINT_PTR_MAX UINT32_MAX
+#define LONG_PTR_MIN LONG_MIN
+#define LONG_PTR_MAX LONG_MAX
+#define ULONG_PTR_MAX ULONG_MAX
+#endif /* defined(_WIN64) */
+#define SSIZE_T_MIN LONG_PTR_MIN
+#define SSIZE_T_MAX LONG_PTR_MAX
+#define PTRDIFF_T_MIN INT_PTR_MIN
+#define PTRDIFF_T_MAX INT_PTR_MAX
+#define SIZE_T_MAX UINT_PTR_MAX
+#define _SIZE_T_MAX ULONG_PTR_MAX
+#define DWORD_PTR_MAX ULONG_PTR_MAX
+
 #define INTSAFE_E_ARITHMETIC_OVERFLOW ((HRESULT)0x80070216)
 
 #ifndef S_OK
-- 
2.52.0

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to