diff options
Diffstat (limited to 'libmisc')
-rw-r--r-- | libmisc/error.c | 9 | ||||
-rw-r--r-- | libmisc/include/libmisc/alloc.h | 7 | ||||
-rw-r--r-- | libmisc/include/libmisc/error.h | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/libmisc/error.c b/libmisc/error.c index dfe4e80..345755c 100644 --- a/libmisc/error.c +++ b/libmisc/error.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ +#include <string.h> /* for strdup() */ + #include <libmisc/error.h> const char *error_msg(error err) { @@ -12,6 +14,13 @@ const char *error_msg(error err) { : _errnum_str_msg(err.num); } +error error_dup(error err) { + return (error){ + .num = err.num, + ._msg = err._msg ? strdup(err._msg) : NULL, + }; +} + void error_cleanup(error *errptr) { if (!errptr) return; diff --git a/libmisc/include/libmisc/alloc.h b/libmisc/include/libmisc/alloc.h index afddbce..34becdb 100644 --- a/libmisc/include/libmisc/alloc.h +++ b/libmisc/include/libmisc/alloc.h @@ -23,4 +23,11 @@ #define heap_alloc(N, TYP) ((TYP *)calloc(N, sizeof(TYP))) +static inline void heap_cleanup(void **ptrptr) { + if (!ptrptr) + return; + free(*ptrptr); + *ptrptr = NULL; +} + #endif /* _LIBMISC_ALLOC_H_ */ diff --git a/libmisc/include/libmisc/error.h b/libmisc/include/libmisc/error.h index 4110626..c9b53dd 100644 --- a/libmisc/include/libmisc/error.h +++ b/libmisc/include/libmisc/error.h @@ -136,6 +136,7 @@ typedef struct { #define ERROR_IS_NULL(err) ((err).num == 0 && (err)._msg == NULL) const char *error_msg(error err); +error error_dup(error err); void error_cleanup(error *errptr); void fmt_print_error(lo_interface fmt_dest w, error err); |