void *
wimlib_aligned_malloc(size_t size, size_t alignment)
{
- u8 *raw_ptr;
- u8 *ptr;
- uintptr_t mask;
-
wimlib_assert(alignment != 0 && is_power_of_2(alignment) &&
alignment <= 4096);
- mask = alignment - 1;
-
- raw_ptr = MALLOC(size + alignment - 1 + sizeof(size_t));
- if (!raw_ptr)
- return NULL;
- ptr = (u8 *)raw_ptr + sizeof(size_t);
- while ((uintptr_t)ptr & mask)
- ptr++;
- *((size_t *)ptr - 1) = (ptr - raw_ptr);
+ const uintptr_t mask = alignment - 1;
+ char *ptr = NULL;
+ char *raw_ptr;
+ raw_ptr = MALLOC(mask + sizeof(size_t) + size);
+ if (raw_ptr) {
+ ptr = (char *)raw_ptr + sizeof(size_t);
+ ptr = (void *)(((uintptr_t)ptr + mask) & ~mask);
+ *((size_t *)ptr - 1) = ptr - raw_ptr;
+ }
return ptr;
}
wimlib_aligned_free(void *ptr)
{
if (ptr)
- FREE((u8 *)ptr - *((size_t *)ptr - 1));
+ FREE((char *)ptr - *((size_t *)ptr - 1));
}
void *
}
#endif
-size_t
-utf16le_strlen(const utf16lechar *s)
-{
- const utf16lechar *p = s;
- while (*p)
- p++;
- return (p - s) * sizeof(utf16lechar);
-}
-
static bool seeded = false;
static void