diff --git a/src/configure.in b/src/configure.in index f07a8b299cf675f82a4c436a450ff821ac26f448..a7ed62c5c69822926545443da5a17bc0bca18029 100644 --- a/src/configure.in +++ b/src/configure.in @@ -4666,6 +4666,7 @@ AC_CHECK_FUNCS( \ SetErrorMode \ thread_info \ host_get_clock_service \ + posix_memalign \ ) # SunOS 4 realloc() returns NULL when reallocing NULL. diff --git a/src/pike_memory.c b/src/pike_memory.c index a6f1250619f546ba0d902250f339a677471ea955..2a250eef86bf2d1150c7658ca4f598b6916e3682 100644 --- a/src/pike_memory.c +++ b/src/pike_memory.c @@ -539,9 +539,17 @@ PMOD_EXPORT void *debug_xcalloc(size_t n, size_t s) PMOD_EXPORT void *aligned_alloc(size_t size, size_t alignment) { void * ret; + if (!size) return 0; + +#ifdef HAVE_POSIX_MEMALIGN if (posix_memalign(&ret, alignment, size)) { Pike_error(msg_out_of_mem_2, size); } +#else + if ((ret = memalign(alignment, size)) == NULL) { + Pike_error(msg_out_of_mem_2, size); + } +#endif return ret; }