| void *malloc(size_t size) |
| return memalign(sizeof(long), size); |
| static bool mult_overflow(size_t a, size_t b) |
| /* 32 bit system, easy case: just use u64 */ |
| return (u64)a * (u64)b >= (1ULL << 32); |
| /* if __int128 is available use it (like the u64 case above) */ |
| unsigned __int128 res = a; |
| if ((a >> 32) && (b >> 32)) |
| if (!(a >> 32) && !(b >> 32)) |
| #endif /* __SIZEOF_INT128__ */ |
| #endif /* BITS_PER_LONG == 32 */ |
| void *calloc(size_t nmemb, size_t size) |
| assert(!mult_overflow(nmemb, size)); |
| ptr = malloc(nmemb * size); |
| memset(ptr, 0, nmemb * size); |
| void *memalign(size_t alignment, size_t size) |
| assert(is_power_of_2(alignment)); |
| assert(alloc_ops && alloc_ops->memalign); |
| p = alloc_ops->memalign(alignment, size); |