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;