From 4ffb9e1500e70611e453e1dd4810577629a31cdd Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 1 Sep 2019 13:41:01 +0200 Subject: [PATCH 1/1] Simplify and improve freep(). Make it a no-op if NULL is passed. Also the comment to \param was slightly incorrect and the code contained an unnecessary cast. --- string.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/string.c b/string.c index 65d22408..198e9f1d 100644 --- a/string.c +++ b/string.c @@ -199,17 +199,22 @@ __must_check __printf_1_2 __malloc char *make_message(const char *fmt, ...) } /** - * Free the content of a pointer and set it to \p NULL. + * Free the content of a pointer and set it to NULL. * - * This is equivalent to "free(*arg); *arg = NULL;". + * \param arg A pointer to the pointer whose content should be freed. * - * \param arg The pointer whose content should be freed. + * If arg is NULL, the function returns immediately. Otherwise it frees the + * memory pointed to by *arg and sets *arg to NULL. Hence callers have to pass + * the *address* of the pointer variable that points to the memory which should + * be freed. */ void freep(void *arg) { - void **ptr = (void **)arg; - free(*ptr); - *ptr = NULL; + if (arg) { + void **ptr = arg; + free(*ptr); + *ptr = NULL; + } } /** -- 2.39.2