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
