Thu, 30 Oct 2025 19:27:18 +0100
fix typo bug in cxListDifference() - resolves #745
| 391 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 1 | /* | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 3 | * | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 4 | * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 5 | * | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 6 | * Redistribution and use in source and binary forms, with or without | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 7 | * modification, are permitted provided that the following conditions are met: | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 8 | * | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 9 | * 1. Redistributions of source code must retain the above copyright | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 10 | * notice, this list of conditions and the following disclaimer. | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 11 | * | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 12 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 13 | * notice, this list of conditions and the following disclaimer in the | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 14 | * documentation and/or other materials provided with the distribution. | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 15 | * | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 26 | * POSSIBILITY OF SUCH DAMAGE. | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 27 | */ | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 28 | |
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 29 | #include "cx/allocator.h" | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 30 | |
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 31 | #include <errno.h> | 
| 1330 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 32 | #include <string.h> | 
| 391 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 33 | |
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 34 | static void *cx_malloc_stdlib( | 
| 985 
68754c7de906
major refactoring of attributes
 Mike Becker <universe@uap-core.de> parents: 
970diff
changeset | 35 | cx_attr_unused void *d, | 
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 36 | size_t n | 
| 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 37 | ) { | 
| 397 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 38 | return malloc(n); | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 39 | } | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 40 | |
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 41 | static void *cx_realloc_stdlib( | 
| 985 
68754c7de906
major refactoring of attributes
 Mike Becker <universe@uap-core.de> parents: 
970diff
changeset | 42 | cx_attr_unused void *d, | 
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 43 | void *mem, | 
| 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 44 | size_t n | 
| 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 45 | ) { | 
| 397 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 46 | return realloc(mem, n); | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 47 | } | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 48 | |
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 49 | static void *cx_calloc_stdlib( | 
| 985 
68754c7de906
major refactoring of attributes
 Mike Becker <universe@uap-core.de> parents: 
970diff
changeset | 50 | cx_attr_unused void *d, | 
| 1169 
6a33a5648027
add documentation for allocator.h
 Mike Becker <universe@uap-core.de> parents: 
1134diff
changeset | 51 | size_t nmemb, | 
| 
6a33a5648027
add documentation for allocator.h
 Mike Becker <universe@uap-core.de> parents: 
1134diff
changeset | 52 | size_t size | 
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 53 | ) { | 
| 1169 
6a33a5648027
add documentation for allocator.h
 Mike Becker <universe@uap-core.de> parents: 
1134diff
changeset | 54 | return calloc(nmemb, size); | 
| 397 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 55 | } | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 56 | |
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 57 | static void cx_free_stdlib( | 
| 985 
68754c7de906
major refactoring of attributes
 Mike Becker <universe@uap-core.de> parents: 
970diff
changeset | 58 | cx_attr_unused void *d, | 
| 508 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 59 | void *mem | 
| 
8aea65ae1eaf
#168 - add attributes and const
 Mike Becker <universe@uap-core.de> parents: 
500diff
changeset | 60 | ) { | 
| 397 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 61 | free(mem); | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 62 | } | 
| 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 63 | |
| 1318 
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
 Mike Becker <universe@uap-core.de> parents: 
1188diff
changeset | 64 | static cx_allocator_class cx_stdlib_allocator_class = { | 
| 396 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 65 | cx_malloc_stdlib, | 
| 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 66 | cx_realloc_stdlib, | 
| 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 67 | cx_calloc_stdlib, | 
| 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 68 | cx_free_stdlib | 
| 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 69 | }; | 
| 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 70 | |
| 1318 
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
 Mike Becker <universe@uap-core.de> parents: 
1188diff
changeset | 71 | struct cx_allocator_s cx_stdlib_allocator = { | 
| 
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
 Mike Becker <universe@uap-core.de> parents: 
1188diff
changeset | 72 | &cx_stdlib_allocator_class, | 
| 391 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 73 | NULL | 
| 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 74 | }; | 
| 1318 
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
 Mike Becker <universe@uap-core.de> parents: 
1188diff
changeset | 75 | const CxAllocator * const cxStdlibAllocator = &cx_stdlib_allocator; | 
| 1395 
395ad9f8da44
fix initialization of cxDefaultAllocator for MSVC
 Mike Becker <universe@uap-core.de> parents: 
1330diff
changeset | 76 | const CxAllocator * cxDefaultAllocator = &cx_stdlib_allocator; | 
| 391 
f094a53c1178
adds allocator interface and default implementation
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 77 | |
| 1134 
60edcd57d54c
fix that some IDEs cannot resolve documentation
 Mike Becker <universe@uap-core.de> parents: 
1104diff
changeset | 78 | int cx_reallocate_( | 
| 726 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 79 | void **mem, | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 80 | size_t n | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 81 | ) { | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 82 | void *nmem = realloc(*mem, n); | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 83 | if (nmem == NULL) { | 
| 1065 
6eb7b54975ee
improve coverage metrics
 Mike Becker <universe@uap-core.de> parents: 
1040diff
changeset | 84 | return 1; // LCOV_EXCL_LINE | 
| 726 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 85 | } else { | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 86 | *mem = nmem; | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 87 | return 0; | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 88 | } | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 89 | } | 
| 
44986c0e2b05
add a low-level stdlib-based cx_reallocate()
 Mike Becker <universe@uap-core.de> parents: 
650diff
changeset | 90 | |
| 1134 
60edcd57d54c
fix that some IDEs cannot resolve documentation
 Mike Becker <universe@uap-core.de> parents: 
1104diff
changeset | 91 | int cx_reallocatearray_( | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 92 | void **mem, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 93 | size_t nmemb, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 94 | size_t size | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 95 | ) { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 96 | size_t n; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 97 | if (cx_szmul(nmemb, size, &n)) { | 
| 1040 
1ecf4dbbc60c
add some more overflow treatment and make sure to set errno properly
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 98 | errno = EOVERFLOW; | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 99 | return 1; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 100 | } else { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 101 | void *nmem = realloc(*mem, n); | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 102 | if (nmem == NULL) { | 
| 1065 
6eb7b54975ee
improve coverage metrics
 Mike Becker <universe@uap-core.de> parents: 
1040diff
changeset | 103 | return 1; // LCOV_EXCL_LINE | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 104 | } else { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 105 | *mem = nmem; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 106 | return 0; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 107 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 108 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 109 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 110 | |
| 628 
1e2be40f0cb5
use //-style single line comments everywhere
 Mike Becker <universe@uap-core.de> parents: 
508diff
changeset | 111 | // IMPLEMENTATION OF HIGH LEVEL API | 
| 434 
38ee262e8b94
add attributes to allocator functions
 Mike Becker <universe@uap-core.de> parents: 
414diff
changeset | 112 | |
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 113 | void *cxMalloc( | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
726diff
changeset | 114 | const CxAllocator *allocator, | 
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 115 | size_t n | 
| 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 116 | ) { | 
| 396 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 117 | return allocator->cl->malloc(allocator->data, n); | 
| 394 
80c31ebd66c1
high level allocator functions should be real functions, not macros
 Mike Becker <universe@uap-core.de> parents: 
391diff
changeset | 118 | } | 
| 
80c31ebd66c1
high level allocator functions should be real functions, not macros
 Mike Becker <universe@uap-core.de> parents: 
391diff
changeset | 119 | |
| 1330 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 120 | void *cxZalloc( | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 121 | const CxAllocator *allocator, | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 122 | size_t n | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 123 | ) { | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 124 | void *mem = allocator->cl->malloc(allocator->data, n); | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 125 | if (mem != NULL) { | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 126 | memset(mem, 0, n); | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 127 | } | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 128 | return mem; | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 129 | } | 
| 
dd5d2402d161
implement zalloc() - resolves #679
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 130 | |
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 131 | void *cxRealloc( | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
726diff
changeset | 132 | const CxAllocator *allocator, | 
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 133 | void *mem, | 
| 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 134 | size_t n | 
| 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 135 | ) { | 
| 396 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 136 | return allocator->cl->realloc(allocator->data, mem, n); | 
| 394 
80c31ebd66c1
high level allocator functions should be real functions, not macros
 Mike Becker <universe@uap-core.de> parents: 
391diff
changeset | 137 | } | 
| 
80c31ebd66c1
high level allocator functions should be real functions, not macros
 Mike Becker <universe@uap-core.de> parents: 
391diff
changeset | 138 | |
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 139 | void *cxReallocArray( | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 140 | const CxAllocator *allocator, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 141 | void *mem, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 142 | size_t nmemb, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 143 | size_t size | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 144 | ) { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 145 | size_t n; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 146 | if (cx_szmul(nmemb, size, &n)) { | 
| 1040 
1ecf4dbbc60c
add some more overflow treatment and make sure to set errno properly
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 147 | errno = EOVERFLOW; | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 148 | return NULL; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 149 | } else { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 150 | return allocator->cl->realloc(allocator->data, mem, n); | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 151 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 152 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 153 | |
| 1134 
60edcd57d54c
fix that some IDEs cannot resolve documentation
 Mike Becker <universe@uap-core.de> parents: 
1104diff
changeset | 154 | int cxReallocate_( | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
726diff
changeset | 155 | const CxAllocator *allocator, | 
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 156 | void **mem, | 
| 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 157 | size_t n | 
| 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 158 | ) { | 
| 450 
7960298039cf
improves usage of attributes
 Mike Becker <universe@uap-core.de> parents: 
434diff
changeset | 159 | void *nmem = allocator->cl->realloc(allocator->data, *mem, n); | 
| 414 | 160 | if (nmem == NULL) { | 
| 1065 
6eb7b54975ee
improve coverage metrics
 Mike Becker <universe@uap-core.de> parents: 
1040diff
changeset | 161 | return 1; // LCOV_EXCL_LINE | 
| 414 | 162 | } else { | 
| 163 | *mem = nmem; | |
| 164 | return 0; | |
| 165 | } | |
| 166 | } | |
| 167 | ||
| 1134 
60edcd57d54c
fix that some IDEs cannot resolve documentation
 Mike Becker <universe@uap-core.de> parents: 
1104diff
changeset | 168 | int cxReallocateArray_( | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 169 | const CxAllocator *allocator, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 170 | void **mem, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 171 | size_t nmemb, | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 172 | size_t size | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 173 | ) { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 174 | void *nmem = cxReallocArray(allocator, *mem, nmemb, size); | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 175 | if (nmem == NULL) { | 
| 1065 
6eb7b54975ee
improve coverage metrics
 Mike Becker <universe@uap-core.de> parents: 
1040diff
changeset | 176 | return 1; // LCOV_EXCL_LINE | 
| 963 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 177 | } else { | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 178 | *mem = nmem; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 179 | return 0; | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 180 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 181 | } | 
| 
2f601274bbac
add reallocarray() like functions - resolves #468
 Mike Becker <universe@uap-core.de> parents: 
935diff
changeset | 182 | |
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 183 | void *cxCalloc( | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
726diff
changeset | 184 | const CxAllocator *allocator, | 
| 1169 
6a33a5648027
add documentation for allocator.h
 Mike Becker <universe@uap-core.de> parents: 
1134diff
changeset | 185 | size_t nmemb, | 
| 
6a33a5648027
add documentation for allocator.h
 Mike Becker <universe@uap-core.de> parents: 
1134diff
changeset | 186 | size_t size | 
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 187 | ) { | 
| 1169 
6a33a5648027
add documentation for allocator.h
 Mike Becker <universe@uap-core.de> parents: 
1134diff
changeset | 188 | return allocator->cl->calloc(allocator->data, nmemb, size); | 
| 394 
80c31ebd66c1
high level allocator functions should be real functions, not macros
 Mike Becker <universe@uap-core.de> parents: 
391diff
changeset | 189 | } | 
| 
80c31ebd66c1
high level allocator functions should be real functions, not macros
 Mike Becker <universe@uap-core.de> parents: 
391diff
changeset | 190 | |
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 191 | void cxFree( | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
726diff
changeset | 192 | const CxAllocator *allocator, | 
| 500 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 193 | void *mem | 
| 
eb9e7bd40a8e
do not hide pointers behind typedefs
 Mike Becker <universe@uap-core.de> parents: 
452diff
changeset | 194 | ) { | 
| 396 
3539dd99ab92
make cx_allocator_class shared
 Mike Becker <universe@uap-core.de> parents: 
394diff
changeset | 195 | allocator->cl->free(allocator->data, mem); | 
| 397 
cfc1193b1e65
removes unnecessary cx_allocator typedef
 Mike Becker <universe@uap-core.de> parents: 
396diff
changeset | 196 | } |