I'm doing this because I tried to compile some native Windows software that referred to DWORD_MAX, and it failed because that macro was missing in intsafe.h .
>From 1a314f9326576773b4869220479291a3f8df6aab Mon Sep 17 00:00:00 2001 From: David Grayson <[email protected]> Date: Tue, 24 Feb 2026 17:33:41 -0800 Subject: [PATCH] headers/intsafe: Add missing MIN/MAX macros. I tested this with my test suite at https://github.com/DavidEGrayson/intsafe to make sure the values and types are correct in 32-bit/64-bit MinGW and 64-bit Cygwin environments. Potential compatibility issues: - The types of smaller macros like UINT8_MAX are 'int', which is different from Microsoft's intsafe.h, but follows the C specification and allows the preprocessor to understand the macro's numeric value. - LONG_MIN, LONG_MAX, and ULONG_MAX describe 'long' and 'unsigned long', whereas native Windows code might expect them to describe LONG and ULONG, which sometimes have a different size. - Some of these definitions are different than what we have in stdint.h, limits.h, and cfgmgr32.h, so I'd like to submit a patch for those later if this is accepted. To keep things consistent and simple, I followed these rules: - A macro does not refer to another macro unless it saves a line of code. Chains of macros are hard to debug because other included headers could break the chain by redefining any macro in the chain. - Only use decimal if it makes the number shorter (otherwise use hex). - Don't use uppercase hex digits. - Only use suffixes if necessary. But use an explicit "u" on any unsigned literal that has a suffix. - Don't use uppercase suffixes (for compatibility with __MSABI_LONG). - Only use subtraction if necessary. Signed-off-by: David Grayson <[email protected]> --- mingw-w64-headers/include/intsafe.h | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/mingw-w64-headers/include/intsafe.h b/mingw-w64-headers/include/intsafe.h index 17f3bda1e..f04765e45 100644 --- a/mingw-w64-headers/include/intsafe.h +++ b/mingw-w64-headers/include/intsafe.h @@ -14,6 +14,72 @@ #include <wtypesbase.h> #include <specstrings.h> +#define INT8_MIN (-128) +#define INT8_MAX 127 +#define UINT8_MAX 255 +#define BYTE_MAX 255 +#define INT16_MIN (-32768) +#define INT16_MAX 32767 +#define SHORT_MIN (-32768) +#define SHORT_MAX 32767 +#define UINT16_MAX 65535 +#define USHORT_MAX 65535 +#define WORD_MAX 65535 +#define INT32_MIN (-0x7fffffff - 1) +#define INT32_MAX 0x7fffffff +#define INT_MIN (-0x7fffffff - 1) +#define INT_MAX 0x7fffffff +#define UINT32_MAX 0xffffffff +#define UINT_MAX 0xffffffff +#define DWORD_MAX __MSABI_LONG(0xffffffffu) +#define INT64_MIN (-0x7fffffffffffffff - 1) +#define INT64_MAX 0x7fffffffffffffff +#define LONGLONG_MIN (-0x7fffffffffffffffll - 1) +#define LONG64_MIN (-0x7fffffffffffffffll - 1) +#define LONGLONG_MAX 0x7fffffffffffffffll +#define LONG64_MAX 0x7fffffffffffffffll +#define UINT64_MAX 0xffffffffffffffff +#define ULONGLONG_MAX 0xffffffffffffffffull +#define ULONG64_MAX 0xffffffffffffffffull +#define DWORDLONG_MAX 0xffffffffffffffffull +#define DWORD64_MAX 0xffffffffffffffffull + +#ifdef __LP64__ +#define LONG_MIN (-0x7fffffffffffffff - 1) +#define LONG_MAX 0x7fffffffffffffff +#define ULONG_MAX 0xffffffffffffffff +#else +#define LONG_MIN (-0x7fffffffl - 1) +#define LONG_MAX 0x7fffffffl +#define ULONG_MAX 0xfffffffful +#endif + +#ifdef _WIN64 +#define PTRDIFF_T_MIN (-0x7fffffffffffffff - 1) +#define PTRDIFF_T_MAX 0x7fffffffffffffff +#define SIZE_T_MAX 0xffffffffffffffff +#define INT_PTR_MIN (-0x7fffffffffffffffll - 1) +#define INT_PTR_MAX 0x7fffffffffffffffll +#define UINT_PTR_MAX 0xffffffffffffffffull +#define LONG_PTR_MIN (-0x7fffffffffffffffll - 1) +#define LONG_PTR_MAX 0x7fffffffffffffffll +#define ULONG_PTR_MAX 0xffffffffffffffffull +#else +#define PTRDIFF_T_MIN (-0x7fffffff - 1) +#define PTRDIFF_T_MAX 0x7fffffff +#define SIZE_T_MAX 0xffffffff +#define INT_PTR_MIN (-0x7fffffff - 1) +#define INT_PTR_MAX 0x7fffffff +#define UINT_PTR_MAX 0xffffffff +#define LONG_PTR_MIN (-0x7fffffffl - 1) +#define LONG_PTR_MAX 0x7fffffffl +#define ULONG_PTR_MAX 0xfffffffful +#endif +#define SSIZE_T_MIN LONG_PTR_MIN +#define SSIZE_T_MAX LONG_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 1a314f9326576773b4869220479291a3f8df6aab Mon Sep 17 00:00:00 2001 From: David Grayson <[email protected]> Date: Tue, 24 Feb 2026 17:33:41 -0800 Subject: [PATCH] headers/intsafe: Add missing MIN/MAX macros. I tested this with my test suite at https://github.com/DavidEGrayson/intsafe to make sure the values and types are correct in 32-bit/64-bit MinGW and 64-bit Cygwin environments. Potential compatibility issues: - The types of smaller macros like UINT8_MAX are 'int', which is different from Microsoft's intsafe.h, but follows the C specification and allows the preprocessor to understand the macro's numeric value. - LONG_MIN, LONG_MAX, and ULONG_MAX describe 'long' and 'unsigned long', whereas native Windows code might expect them to describe LONG and ULONG, which sometimes have a different size. - Some of these definitions are different than what we have in stdint.h, limits.h, and cfgmgr32.h, so I'd like to submit a patch for those later if this is acceptd. To keep things consistent and simple, I followed these rules: - A macro does not refer to another macro unless it saves a line of code. Chains of macros are hard to debug because other included headers could break the chain by redefining any macro in the chain. - Only use decimal if it makes the number shorter (otherwise use hex). - Don't use uppercase hex digits. - Only use suffixes if necessary. But use an explicit "u" on any unsigned literal that has a suffix. - Don't use uppercase suffixes (for compatibility with __MSABI_LONG). - Only use subtraction if necessary. Signed-off-by: David Grayson <[email protected]> --- mingw-w64-headers/include/intsafe.h | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/mingw-w64-headers/include/intsafe.h b/mingw-w64-headers/include/intsafe.h index 17f3bda1e..f04765e45 100644 --- a/mingw-w64-headers/include/intsafe.h +++ b/mingw-w64-headers/include/intsafe.h @@ -14,6 +14,72 @@ #include <wtypesbase.h> #include <specstrings.h> +#define INT8_MIN (-128) +#define INT8_MAX 127 +#define UINT8_MAX 255 +#define BYTE_MAX 255 +#define INT16_MIN (-32768) +#define INT16_MAX 32767 +#define SHORT_MIN (-32768) +#define SHORT_MAX 32767 +#define UINT16_MAX 65535 +#define USHORT_MAX 65535 +#define WORD_MAX 65535 +#define INT32_MIN (-0x7fffffff - 1) +#define INT32_MAX 0x7fffffff +#define INT_MIN (-0x7fffffff - 1) +#define INT_MAX 0x7fffffff +#define UINT32_MAX 0xffffffff +#define UINT_MAX 0xffffffff +#define DWORD_MAX __MSABI_LONG(0xffffffffu) +#define INT64_MIN (-0x7fffffffffffffff - 1) +#define INT64_MAX 0x7fffffffffffffff +#define LONGLONG_MIN (-0x7fffffffffffffffll - 1) +#define LONG64_MIN (-0x7fffffffffffffffll - 1) +#define LONGLONG_MAX 0x7fffffffffffffffll +#define LONG64_MAX 0x7fffffffffffffffll +#define UINT64_MAX 0xffffffffffffffff +#define ULONGLONG_MAX 0xffffffffffffffffull +#define ULONG64_MAX 0xffffffffffffffffull +#define DWORDLONG_MAX 0xffffffffffffffffull +#define DWORD64_MAX 0xffffffffffffffffull + +#ifdef __LP64__ +#define LONG_MIN (-0x7fffffffffffffff - 1) +#define LONG_MAX 0x7fffffffffffffff +#define ULONG_MAX 0xffffffffffffffff +#else +#define LONG_MIN (-0x7fffffffl - 1) +#define LONG_MAX 0x7fffffffl +#define ULONG_MAX 0xfffffffful +#endif + +#ifdef _WIN64 +#define PTRDIFF_T_MIN (-0x7fffffffffffffff - 1) +#define PTRDIFF_T_MAX 0x7fffffffffffffff +#define SIZE_T_MAX 0xffffffffffffffff +#define INT_PTR_MIN (-0x7fffffffffffffffll - 1) +#define INT_PTR_MAX 0x7fffffffffffffffll +#define UINT_PTR_MAX 0xffffffffffffffffull +#define LONG_PTR_MIN (-0x7fffffffffffffffll - 1) +#define LONG_PTR_MAX 0x7fffffffffffffffll +#define ULONG_PTR_MAX 0xffffffffffffffffull +#else +#define PTRDIFF_T_MIN (-0x7fffffff - 1) +#define PTRDIFF_T_MAX 0x7fffffff +#define SIZE_T_MAX 0xffffffff +#define INT_PTR_MIN (-0x7fffffff - 1) +#define INT_PTR_MAX 0x7fffffff +#define UINT_PTR_MAX 0xffffffff +#define LONG_PTR_MIN (-0x7fffffffl - 1) +#define LONG_PTR_MAX 0x7fffffffl +#define ULONG_PTR_MAX 0xfffffffful +#endif +#define SSIZE_T_MIN LONG_PTR_MIN +#define SSIZE_T_MAX LONG_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
