if (!(mem = malloc(len + align-1)))
return NULL;
- header = ((size_t *)mem)[-1];
new = (void *)((uintptr_t)mem + align-1 & -align);
+ if (new == mem) return mem;
+
+ header = ((size_t *)mem)[-1];
if (!(header & 7)) {
((size_t *)new)[-2] = ((size_t *)mem)[-2] + (new-mem);
((size_t *)new)[-1] = header&7 | end-new;
((size_t *)end)[-2] = footer&7 | end-new;
- if (new != mem) free(mem);
+ free(mem);
return new;
}