mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
ea0b5d9d1c
A new rollup tool now exists for flattening out the headers in a way that works better for our purposes than cpp. A lot of the API clutter has been removed. APIs that aren't a sure thing in terms of general recommendation are now marked internal. There's now a smoke test for the amalgamation archive and gigantic header file. So we can now guarantee you can use this project on the easiest difficulty setting without the gigantic repository. A website is being created, which is currently a work in progress: https://justine.storage.googleapis.com/cosmopolitan/index.html
28 lines
742 B
C
28 lines
742 B
C
#include "libc/errno.h"
|
|
#include "libc/mem/mem.h"
|
|
#include "libc/sysv/errfuns.h"
|
|
#include "third_party/dlmalloc/dlmalloc.internal.h"
|
|
|
|
int dlposix_memalign(void** pp, size_t alignment, size_t bytes) {
|
|
void* mem;
|
|
size_t d, r;
|
|
mem = NULL;
|
|
if (alignment == MALLOC_ALIGNMENT) {
|
|
mem = dlmalloc(bytes);
|
|
} else {
|
|
d = alignment / sizeof(void*);
|
|
r = alignment % sizeof(void*);
|
|
if (r != 0 || d == 0 || (d & (d - SIZE_T_ONE)) != 0) {
|
|
return einval();
|
|
} else if (bytes <= MAX_REQUEST - alignment) {
|
|
if (alignment < MIN_CHUNK_SIZE) alignment = MIN_CHUNK_SIZE;
|
|
mem = dlmemalign$impl(g_dlmalloc, alignment, bytes);
|
|
}
|
|
}
|
|
if (mem == 0) {
|
|
return enomem();
|
|
} else {
|
|
*pp = mem;
|
|
return 0;
|
|
}
|
|
}
|