summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-05-03 09:17:33 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-05-04 09:37:06 +0200
commitd692c62dfbf834c16ef7f171ea3161b3f3fac06b (patch)
tree470caacab92461cbf8afee32d8c9a9230ac7102a /cpukit/libcsupport/src
parentbsps/riscv: Support RTEMS_NOINIT in linkcmds (diff)
downloadrtems-d692c62dfbf834c16ef7f171ea3161b3f3fac06b.tar.bz2
Make zero size allocation result consistent
The zero size allocations had no consistent behaviour in RTEMS. For example, malloc( 0 ) returned NULL and posix_memalign( &p, align, 0 ) returned in p a unique pointer (or NULL if no memory is available). In POSIX, zero size memory allocations are implementation-defined behaviour. The implementation has two options: https://pubs.opengroup.org/onlinepubs/9699919799/functions/malloc.html https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html Linux and FreeBSD return a unique pointer for zero size memory allocations. Use this approach for RTEMS as well throughout the memory allocation directives Close #4390.
Diffstat (limited to 'cpukit/libcsupport/src')
-rw-r--r--cpukit/libcsupport/src/malloc.c6
-rw-r--r--cpukit/libcsupport/src/malloc_deferred.c4
-rw-r--r--cpukit/libcsupport/src/realloc.c8
3 files changed, 4 insertions, 14 deletions
diff --git a/cpukit/libcsupport/src/malloc.c b/cpukit/libcsupport/src/malloc.c
index e61128bf8c..795254fbab 100644
--- a/cpukit/libcsupport/src/malloc.c
+++ b/cpukit/libcsupport/src/malloc.c
@@ -30,12 +30,6 @@ void *malloc(
{
void *return_this;
- /*
- * Validate the parameters
- */
- if ( !size )
- return (void *) 0;
-
return_this = rtems_heap_allocate_aligned_with_boundary( size, 0, 0 );
if ( !return_this ) {
errno = ENOMEM;
diff --git a/cpukit/libcsupport/src/malloc_deferred.c b/cpukit/libcsupport/src/malloc_deferred.c
index b319d1213e..aab76406c7 100644
--- a/cpukit/libcsupport/src/malloc_deferred.c
+++ b/cpukit/libcsupport/src/malloc_deferred.c
@@ -106,10 +106,6 @@ void *rtems_heap_allocate_aligned_with_boundary(
void *rtems_malloc( size_t size )
{
- if ( size == 0 ) {
- return NULL;
- }
-
return rtems_heap_allocate_aligned_with_boundary( size, 0, 0 );
}
#endif
diff --git a/cpukit/libcsupport/src/realloc.c b/cpukit/libcsupport/src/realloc.c
index 1d9ae45c5d..e28e3fbc33 100644
--- a/cpukit/libcsupport/src/realloc.c
+++ b/cpukit/libcsupport/src/realloc.c
@@ -53,15 +53,15 @@ void *realloc( void *ptr, size_t size )
uintptr_t old_size;
uintptr_t avail_size;
+ if ( ptr == NULL ) {
+ return malloc( size );
+ }
+
if ( size == 0 ) {
free( ptr );
return NULL;
}
- if ( ptr == NULL ) {
- return malloc( size );
- }
-
heap = RTEMS_Malloc_Heap;
switch ( _Malloc_System_state() ) {