aboutsummaryrefslogtreecommitdiff
path: root/src/secp256k1/src/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/secp256k1/src/util.h')
-rw-r--r--src/secp256k1/src/util.h26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/secp256k1/src/util.h b/src/secp256k1/src/util.h
index ae98639f7c..4eef4ded47 100644
--- a/src/secp256k1/src/util.h
+++ b/src/secp256k1/src/util.h
@@ -15,6 +15,15 @@
#include <stdint.h>
#include <stdio.h>
+typedef struct {
+ void (*fn)(const char *text, void* data);
+ const void* data;
+} secp256k1_callback;
+
+static SECP256K1_INLINE void secp256k1_callback_call(const secp256k1_callback * const cb, const char * const text) {
+ cb->fn(text, (void*)cb->data);
+}
+
#ifdef DETERMINISTIC
#define TEST_FAILURE(msg) do { \
fprintf(stderr, "%s\n", msg); \
@@ -47,23 +56,20 @@
} while(0)
#endif
-/* Like assert(), but safe to use on expressions with side effects. */
-#ifndef NDEBUG
-#define DEBUG_CHECK CHECK
-#else
-#define DEBUG_CHECK(cond) do { (void)(cond); } while(0)
-#endif
-
-/* Like DEBUG_CHECK(), but when VERIFY is defined instead of NDEBUG not defined. */
+/* Like assert(), but when VERIFY is defined, and side-effect safe. */
#ifdef VERIFY
#define VERIFY_CHECK CHECK
+#define VERIFY_SETUP(stmt) do { stmt; } while(0)
#else
#define VERIFY_CHECK(cond) do { (void)(cond); } while(0)
+#define VERIFY_SETUP(stmt)
#endif
-static SECP256K1_INLINE void *checked_malloc(size_t size) {
+static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_t size) {
void *ret = malloc(size);
- CHECK(ret != NULL);
+ if (ret == NULL) {
+ secp256k1_callback_call(cb, "Out of memory");
+ }
return ret;
}