1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2010 Lennart Poettering
11 #include "alloc-util.h"
15 void* memdup(const void *p, size_t l) {
28 void* memdup_suffix0(const void *p, size_t l) {
33 /* The same as memdup() but place a safety NUL byte after the allocated memory */
39 *((uint8_t*) mempcpy(ret, p, l)) = 0;
43 void* greedy_realloc(void **p, size_t *allocated, size_t need, size_t size) {
50 if (*allocated >= need)
53 newalloc = MAX(need * 2, 64u / size);
56 /* check for overflows */
65 *allocated = newalloc;
69 void* greedy_realloc0(void **p, size_t *allocated, size_t need, size_t size) {
78 q = greedy_realloc(p, allocated, need, size);
82 if (*allocated > prev)
83 memzero(q + prev * size, (*allocated - prev) * size);