From e575132a04bbe03469d5a1048dbc620414d6fe9c Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Thu, 9 Aug 2007 03:08:25 +0000 Subject: [PATCH] (posix_memalign): New function. --- src/ChangeLog | 8 ++++++-- src/gmalloc.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index adef925992c..20469ca12e3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2007-08-09 YAMAMOTO Mitsuharu + + * gmalloc.c (posix_memalign): New function. + 2007-08-08 Glenn Morris * Replace `iff' in doc-strings and comments. @@ -31,8 +35,8 @@ Call malloc_enable_thread on interactive startup. * gmalloc.c (_malloc_thread_enabled_p) [USE_PTHREAD]: New variable. - [USE_PTHREAD] (LOCK, UNLOCK, LOCK_ALIGNED_BLOCKS) - (UNLOCK_ALIGNED_BLOCKS): Conditionalize with it. + (LOCK, UNLOCK, LOCK_ALIGNED_BLOCKS, UNLOCK_ALIGNED_BLOCKS) + [USE_PTHREAD]: Conditionalize with it. (malloc_atfork_handler_prepare, malloc_atfork_handler_parent) (malloc_atfork_handler_child, malloc_enable_thread) [USE_PTHREAD]: New functions. diff --git a/src/gmalloc.c b/src/gmalloc.c index ea6ccc4bf1f..ccc08e1ff68 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -129,6 +129,8 @@ extern FREE_RETURN_TYPE free PP ((__ptr_t __ptr)); #if ! (defined (_MALLOC_INTERNAL) && __DJGPP__ - 0 == 1) /* Avoid conflict. */ extern __ptr_t memalign PP ((__malloc_size_t __alignment, __malloc_size_t __size)); +extern int posix_memalign PP ((__ptr_t *, __malloc_size_t, + __malloc_size_t size)); #endif /* Allocate SIZE bytes on a page boundary. */ @@ -1857,6 +1859,36 @@ memalign (alignment, size) return result; } +#ifndef ENOMEM +#define ENOMEM 12 +#endif + +#ifndef EINVAL +#define EINVAL 22 +#endif + +int +posix_memalign (memptr, alignment, size) + __ptr_t *memptr; + __malloc_size_t alignment; + __malloc_size_t size; +{ + __ptr_t mem; + + if (alignment == 0 + || alignment % sizeof (__ptr_t) != 0 + || (alignment & (alignment - 1)) != 0) + return EINVAL; + + mem = memalign (alignment, size); + if (mem == NULL) + return ENOMEM; + + *memptr = mem; + + return 0; +} + #endif /* Not DJGPP v1 */ /* Allocate memory on a page boundary. Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc. -- 2.39.2