mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 15:09:31 +03:00
move include 'limits.h' outside of definition
This commit is contained in:
parent
532447fb33
commit
c5406f327e
1 changed files with 14 additions and 13 deletions
|
@ -238,27 +238,28 @@ static inline bool mi_malloc_satisfies_alignment(size_t alignment, size_t size)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overflow detecting multiply
|
// Overflow detecting multiply
|
||||||
static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) {
|
|
||||||
#if __has_builtin(__builtin_umul_overflow) || __GNUC__ >= 5
|
#if __has_builtin(__builtin_umul_overflow) || __GNUC__ >= 5
|
||||||
#include <limits.h> // UINT_MAX, ULONG_MAX
|
#include <limits.h> // UINT_MAX, ULONG_MAX
|
||||||
#if defined(_CLOCK_T)
|
#if defined(_CLOCK_T) // for Illumos
|
||||||
#undef _CLOCK_T
|
#undef _CLOCK_T
|
||||||
#endif
|
#endif
|
||||||
|
static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) {
|
||||||
#if (SIZE_MAX == UINT_MAX)
|
#if (SIZE_MAX == UINT_MAX)
|
||||||
return __builtin_umul_overflow(count, size, total);
|
return __builtin_umul_overflow(count, size, total);
|
||||||
#elif (SIZE_MAX == ULONG_MAX)
|
#elif (SIZE_MAX == ULONG_MAX)
|
||||||
return __builtin_umull_overflow(count, size, total);
|
return __builtin_umull_overflow(count, size, total);
|
||||||
#else
|
#else
|
||||||
return __builtin_umulll_overflow(count, size, total);
|
return __builtin_umulll_overflow(count, size, total);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
#else /* __builtin_umul_overflow is unavailable */
|
#else /* __builtin_umul_overflow is unavailable */
|
||||||
|
static inline bool mi_mul_overflow(size_t count, size_t size, size_t* total) {
|
||||||
#define MI_MUL_NO_OVERFLOW ((size_t)1 << (4*sizeof(size_t))) // sqrt(SIZE_MAX)
|
#define MI_MUL_NO_OVERFLOW ((size_t)1 << (4*sizeof(size_t))) // sqrt(SIZE_MAX)
|
||||||
*total = count * size;
|
*total = count * size;
|
||||||
return ((size >= MI_MUL_NO_OVERFLOW || count >= MI_MUL_NO_OVERFLOW)
|
return ((size >= MI_MUL_NO_OVERFLOW || count >= MI_MUL_NO_OVERFLOW)
|
||||||
&& size > 0 && (SIZE_MAX / size) < count);
|
&& size > 0 && (SIZE_MAX / size) < count);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Safe multiply `count*size` into `total`; return `true` on overflow.
|
// Safe multiply `count*size` into `total`; return `true` on overflow.
|
||||||
static inline bool mi_count_size_overflow(size_t count, size_t size, size_t* total) {
|
static inline bool mi_count_size_overflow(size_t count, size_t size, size_t* total) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue