diff options
Diffstat (limited to 'shared/systemd/src/basic/memory-util.h')
| -rw-r--r-- | shared/systemd/src/basic/memory-util.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/shared/systemd/src/basic/memory-util.h b/shared/systemd/src/basic/memory-util.h index 46a6907a..b7e2e67e 100644 --- a/shared/systemd/src/basic/memory-util.h +++ b/shared/systemd/src/basic/memory-util.h @@ -7,6 +7,7 @@ #include <string.h> #include <sys/types.h> +#include "alloc-util.h" #include "macro.h" size_t page_size(void) _pure_; @@ -80,14 +81,19 @@ static inline void* explicit_bzero_safe(void *p, size_t l) { void *explicit_bzero_safe(void *p, size_t l); #endif -static inline void erase_and_freep(void *p) { - void *ptr = *(void**) p; +static inline void* erase_and_free(void *p) { + size_t l; + + if (!p) + return NULL; - if (ptr) { - size_t l = malloc_usable_size(ptr); - explicit_bzero_safe(ptr, l); - free(ptr); - } + l = malloc_usable_size(p); + explicit_bzero_safe(p, l); + return mfree(p); +} + +static inline void erase_and_freep(void *p) { + erase_and_free(*(void**) p); } /* Use with _cleanup_ to erase a single 'char' when leaving scope */ |