]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/alloc-util.c
f4bd33f4e014246a9c9e68f8f75e0023541a967d
1 /* SPDX-License-Identifier: LGPL-2.1+ */
6 #include "alloc-util.h"
8 #include "memory-util.h"
10 void* memdup(const void *p
, size_t l
) {
23 void* memdup_suffix0(const void *p
, size_t l
) {
28 /* The same as memdup() but place a safety NUL byte after the allocated memory */
30 if (_unlikely_(l
== SIZE_MAX
)) /* prevent overflow */
37 *((uint8_t*) mempcpy(ret
, p
, l
)) = 0;
41 void* greedy_realloc(void **p
, size_t *allocated
, size_t need
, size_t size
) {
48 if (*allocated
>= need
)
51 if (_unlikely_(need
> SIZE_MAX
/2)) /* Overflow check */
55 if (size_multiply_overflow(newalloc
, size
))
59 if (a
< 64) /* Allocate at least 64 bytes */
67 *allocated
= newalloc
;
71 void* greedy_realloc0(void **p
, size_t *allocated
, size_t need
, size_t size
) {
80 q
= greedy_realloc(p
, allocated
, need
, size
);
84 if (*allocated
> prev
)
85 memzero(q
+ prev
* size
, (*allocated
- prev
) * size
);