commit 8b93160

uint  ·  2026-10-03 15:06:24 +0000 UTC
parent 5a5447a
Types: Harden detections
1 files changed,  +45, -35
+45, -35
  1@@ -37,9 +37,13 @@ typedef signed char   ule_i8;
  2 #if USHRT_MAX == 0xFFFFU
  3 	typedef unsigned short ule_u16;
  4 	typedef signed short   ule_i16;
  5+	#define ULE_I16_MAX ((ule_i16)SHRT_MAX)
  6+	#define ULE_I16_MIN ((ule_i16)SHRT_MIN)
  7 #elif UINT_MAX == 0xFFFFU
  8 	typedef unsigned int ule_u16;
  9 	typedef signed int   ule_i16;
 10+	#define ULE_I16_MAX ((ule_i16)INT_MAX)
 11+	#define ULE_I16_MIN ((ule_i16)INT_MIN)
 12 #else
 13 	#error "libule: no 16-bit integer type"
 14 #endif
 15@@ -48,12 +52,18 @@ typedef signed char   ule_i8;
 16 #if UINT_MAX == 0xFFFFFFFFUL
 17 	typedef unsigned int ule_u32;
 18 	typedef signed int   ule_i32;
 19+	#define ULE_I32_MAX ((ule_i32)INT_MAX)
 20+	#define ULE_I32_MIN ((ule_i32)INT_MIN)
 21 #elif ULONG_MAX == 0xFFFFFFFFUL
 22 	typedef unsigned long ule_u32;
 23 	typedef signed long   ule_i32;
 24+	#define ULE_I32_MAX ((ule_i32)LONG_MAX)
 25+	#define ULE_I32_MIN ((ule_i32)LONG_MIN)
 26 #elif USHRT_MAX == 0xFFFFFFFFUL
 27 	typedef unsigned short ule_u32;
 28 	typedef signed short   ule_i32;
 29+	#define ULE_I32_MAX ((ule_i32)SHRT_MAX)
 30+	#define ULE_I32_MIN ((ule_i32)SHRT_MIN)
 31 #else
 32 	#error "libule: no 32-bit integer type"
 33 #endif
 34@@ -62,19 +72,28 @@ typedef signed char   ule_i8;
 35 #if ULONG_MAX > 0xFFFFFFFFUL
 36 	typedef unsigned long ule_u64;
 37 	typedef signed long   ule_i64;
 38+	#define ULE_I64_MAX ((ule_i64)LONG_MAX)
 39+	#define ULE_I64_MIN ((ule_i64)LONG_MIN)
 40 	#define ULE_HAS_64 1
 41-
 42-#elif defined(_MSC_VER)
 43-	typedef unsigned __int64 ule_u64;
 44-	typedef signed __int64   ule_i64;
 45-	#define ULE_HAS_64 1
 46-
 47-#elif defined(__GNUC__) || defined(__clang__)
 48-	__extension__ typedef unsigned long long ule_u64;
 49-	__extension__ typedef signed long long   ule_i64;
 50+#elif defined(_WIN64)
 51+	typedef size_t    ule_u64;
 52+	typedef ptrdiff_t ule_i64;
 53 	#define ULE_HAS_64 1
 54+	#define ULE_I64_TWOS_COMPLEMENT 1
 55 #endif
 56 
 57+typedef char ule_check_u8[(sizeof(ule_u8) * CHAR_BIT == 8) ? 1 : -1];
 58+typedef char ule_check_i8[(sizeof(ule_i8) * CHAR_BIT == 8) ? 1 : -1];
 59+typedef char ule_check_u16[(sizeof(ule_u16) * CHAR_BIT == 16) ? 1 : -1];
 60+typedef char ule_check_i16[(sizeof(ule_i16) * CHAR_BIT == 16) ? 1 : -1];
 61+typedef char ule_check_u32[(sizeof(ule_u32) * CHAR_BIT == 32) ? 1 : -1];
 62+typedef char ule_check_i32[(sizeof(ule_i32) * CHAR_BIT == 32) ? 1 : -1];
 63+
 64+#ifdef ULE_HAS_64
 65+	typedef char ule_check_u64[(sizeof(ule_u64) * CHAR_BIT == 64) ? 1 : -1];
 66+	typedef char ule_check_i64[(sizeof(ule_i64) * CHAR_BIT == 64) ? 1 : -1];
 67+#endif /* ULE_HAS_64 */
 68+
 69 /* Pointer Length Sizes */
 70 #if defined(ULE_UPTR_TYPE) != defined(ULE_IPTR_TYPE)
 71 	#error "libule: define both ULE_UPTR_TYPE and ULE_IPTR_TYPE"
 72@@ -84,43 +103,34 @@ typedef signed char   ule_i8;
 73 	typedef ULE_UPTR_TYPE ule_uptr;
 74 	typedef ULE_IPTR_TYPE ule_iptr;
 75 
 76-#elif defined(_WIN64)
 77-	typedef unsigned __int64 ule_uptr;
 78-	typedef signed __int64   ule_iptr;
 79-
 80-#elif defined(_WIN32)
 81-	typedef unsigned long ule_uptr;
 82-	typedef signed long   ule_iptr;
 83-
 84-#elif defined(__LP64__) || defined(_LP64)
 85-	typedef unsigned long ule_uptr;
 86-	typedef signed long   ule_iptr;
 87-
 88-#elif defined(__ILP32__) || defined(_ILP32)
 89-	typedef unsigned int ule_uptr;
 90-	typedef signed int   ule_iptr;
 91+#elif defined(_WIN64) || defined(_WIN32) || \
 92+      defined(__LP64__) || defined(_LP64) || \
 93+      defined(__ILP32__) || defined(_ILP32)
 94+	typedef size_t    ule_uptr;
 95+	typedef ptrdiff_t ule_iptr;
 96 
 97 #else
 98 	#error "libule: define ULE_UPTR_TYPE and ULE_IPTR_TYPE for this target"
 99 #endif
100 
101+typedef char ule_check_uptr[(sizeof(ule_uptr) == sizeof(void*)) ? 1 : -1];
102+typedef char ule_check_iptr[(sizeof(ule_iptr) == sizeof(void*)) ? 1 : -1];
103+
104 /* Limits */
105 #define ULE_U8_MAX ((ule_u8)0xFFU)
106-#define ULE_I8_MAX ((ule_i8)0x7F)
107-#define ULE_I8_MIN ((ule_i8)(-0x7F - 1))
108+#define ULE_I8_MAX ((ule_i8)SCHAR_MAX)
109+#define ULE_I8_MIN ((ule_i8)SCHAR_MIN)
110 
111 #define ULE_U16_MAX ((ule_u16)0xFFFFU)
112-#define ULE_I16_MAX ((ule_i16)0x7FFF)
113-#define ULE_I16_MIN ((ule_i16)(-0x7FFF - 1))
114-
115 #define ULE_U32_MAX ((ule_u32)0xFFFFFFFFUL)
116-#define ULE_I32_MAX ((ule_i32)0x7FFFFFFFL)
117-#define ULE_I32_MIN ((ule_i32)(-0x7FFFFFFFL - 1L))
118 
119 #ifdef ULE_HAS_64
120 	#define ULE_U64_MAX ((ule_u64)-1)
121-	#define ULE_I64_MAX ((ule_i64)(ULE_U64_MAX >> 1))
122-	#define ULE_I64_MIN ((ule_i64)(-ULE_I64_MAX - 1))
123+
124+	#ifdef ULE_I64_TWOS_COMPLEMENT
125+		#define ULE_I64_MAX ((ule_i64)(ULE_U64_MAX >> 1))
126+		#define ULE_I64_MIN ((ule_i64)(-ULE_I64_MAX - 1))
127+	#endif /* ULE_I64_TWOS_COMPLEMENT */
128 #endif /* ULE_HAS_64 */
129 
130 /* Size types */
131@@ -136,10 +146,10 @@ typedef ptrdiff_t ule_isize;
132 	typedef ule_u32 u32;
133 	typedef ule_i32 i32;
134 
135-	#if defined(ULE_HAS_64)
136+	#ifdef ULE_HAS_64
137 		typedef ule_u64 u64;
138 		typedef ule_i64 i64;
139-	#endif
140+	#endif /* ULE_HAS_64 */
141 
142 	typedef ule_uptr  uptr;
143 	typedef ule_iptr  iptr;