diff --git a/include/libc.h b/include/libc.h index bf96d63..21a52e2 100644 --- a/include/libc.h +++ b/include/libc.h @@ -168,6 +168,7 @@ unsigned long strtoul(const char *restrict, char **restrict, int); //----------------------------------------------------------------------------// void *calloc(size_t, size_t) __attribute__((__malloc__)); +void *memalign(size_t n, size_t align) __attribute__((__malloc__)); void *malloc(size_t) __attribute__((__malloc__)); void free(void *); diff --git a/kaleid/libc/mem.c b/kaleid/libc/mem.c index 7107bd0..46772d2 100644 --- a/kaleid/libc/mem.c +++ b/kaleid/libc/mem.c @@ -46,6 +46,21 @@ void *malloc(size_t n) return ptr; } +void *memalign(size_t n, size_t align) +{ + void *ptr; + error_t rc; + +#ifndef _KALEID_KERNEL + rc = KalAllocMemoryEx(&ptr, n, 0, align); +#else + rc = KalAllocMemoryEx(&ptr, n, M_ZEROED, align); +#endif + if (rc > 0) seterrno(rc); + + return ptr; +} + void *calloc(size_t n, size_t m) { void *ptr;