summaryrefslogtreecommitdiff
path: root/include/mailutils/opool.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/mailutils/opool.h')
-rw-r--r--include/mailutils/opool.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/mailutils/opool.h b/include/mailutils/opool.h
index 45fe64f8f..9f474cf31 100644
--- a/include/mailutils/opool.h
+++ b/include/mailutils/opool.h
@@ -19,6 +19,7 @@
#define _MAILUTILS_OPOOL_H
#include <mailutils/types.h>
+#include <setjmp.h>
#ifndef MU_OPOOL_BUCKET_SIZE
# define MU_OPOOL_BUCKET_SIZE 1024
@@ -33,6 +34,27 @@ int mu_opool_create (mu_opool_t *pret, int flags);
int mu_opool_set_bucket_size (mu_opool_t opool, size_t size);
int mu_opool_get_bucket_size (mu_opool_t opool, size_t *psize);
+struct mu_nonlocal_jmp
+{
+ jmp_buf buf;
+ struct mu_nonlocal_jmp *next;
+};
+
+typedef struct mu_nonlocal_jmp mu_nonlocal_jmp_t;
+
+void mu_opool_setjmp (mu_opool_t opool, mu_nonlocal_jmp_t *err);
+void mu_opool_clrjmp (mu_opool_t opool);
+
+#define mu_opool_setup_nonlocal_jump(p,jb) \
+ do \
+ { \
+ int __rc = setjmp (jb.buf); \
+ if (__rc) \
+ return __rc; \
+ mu_opool_setjmp (p, &jb); \
+ } \
+ while (0)
+
/* Merge all data from *SRC into *DST. If the latter is NULL, create
it. On success, free *SRC and initialize it with NULL. */
int mu_opool_union (mu_opool_t *dst, mu_opool_t *src);

Return to:

Send suggestions and report system problems to the System administrator.