From e153be0be2fb8df6656292daab3fa59963c76737 Mon Sep 17 00:00:00 2001
From: 3gg <3gg@shellblade.net>
Date: Tue, 13 Feb 2024 17:51:51 -0800
Subject: Let memory allocators trap by default when attempting to allocate
 beyond capacity.

---
 cassert/include/cassert.h | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 cassert/include/cassert.h

(limited to 'cassert/include')

diff --git a/cassert/include/cassert.h b/cassert/include/cassert.h
new file mode 100644
index 0000000..3349b55
--- /dev/null
+++ b/cassert/include/cassert.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#include <assert.h> // For convenience, bring in soft assertions with assert().
+#include <signal.h>
+
+// Allow the client to define their own LOGE() macro.
+#ifndef LOGE
+#include <stdio.h>
+#define LOGE(...)                                            \
+  {                                                          \
+    fprintf(stderr, "[ASSERT] %s:%d: ", __FILE__, __LINE__); \
+    fprintf(stderr, __VA_ARGS__);                            \
+    fprintf(stderr, "\n");                                   \
+  }
+#endif // LOGE
+
+#define TRAP() raise(SIGTRAP)
+
+/// Unconditional hard assert.
+#define FAIL(message) \
+  LOGE(message);      \
+  TRAP();
+
+/// Conditional hard assert.
+#define ASSERT(condition)                 \
+  if (!condition) {                       \
+    LOGE("Assertion failed: " #condition) \
+    TRAP();                               \
+  }
-- 
cgit v1.2.3