source: rtems/cpukit/libcsupport/src/rtems_memalign.c @ 2c5199b

Last change on this file since 2c5199b was 2c5199b, checked in by Sebastian Huber <sebastian.huber@…>, on 05/05/21 at 06:49:52

Return NULL for zero size allocations

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. Return NULL on RTEMS to more likely catch the use of a
zero size memory area by erroneous applications.

Update #4390.

  • Property mode set to 100644
File size: 959 bytes
Line 
1/**
2 *  @file
3 *
4 *  @brief RTEMS Variation on Aligned Memory Allocation
5 *  @ingroup MallocSupport
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-2008.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.org/license/LICENSE.
15 */
16
17#ifdef HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#ifdef RTEMS_NEWLIB
22#include "malloc_p.h"
23
24#include <stdlib.h>
25#include <errno.h>
26
27int rtems_memalign(
28  void   **pointer,
29  size_t   alignment,
30  size_t   size
31)
32{
33  void *return_this;
34
35  /*
36   *  Parameter error checks
37   */
38  if ( !pointer )
39    return EINVAL;
40
41  *pointer = NULL;
42
43  if ( size == 0 ) {
44    return 0;
45  }
46
47  /*
48   *  Perform the aligned allocation requested
49   */
50  return_this = rtems_heap_allocate_aligned_with_boundary( size, alignment, 0 );
51  if ( !return_this )
52    return ENOMEM;
53
54  *pointer = return_this;
55  return 0;
56}
57#endif
Note: See TracBrowser for help on using the repository browser.