summaryrefslogtreecommitdiff
path: root/libmisc
diff options
context:
space:
mode:
Diffstat (limited to 'libmisc')
-rw-r--r--libmisc/error.c9
-rw-r--r--libmisc/include/libmisc/alloc.h7
-rw-r--r--libmisc/include/libmisc/error.h1
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);