summaryrefslogtreecommitdiff
path: root/test/assert.c
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-09-17 08:47:03 +0200
committerAlbert Cervin <albert@acervin.com>2025-11-01 22:11:14 +0100
commit4459b8b3aa9d73895391785a99dcc87134e80601 (patch)
treea5204f447a0b2b05f63504c7fe958ef9bbf1918a /test/assert.c
parent4689f3f38277bb64981fc960e8e384e2d065d659 (diff)
downloaddged-4459b8b3aa9d73895391785a99dcc87134e80601.tar.gz
dged-4459b8b3aa9d73895391785a99dcc87134e80601.tar.xz
dged-4459b8b3aa9d73895391785a99dcc87134e80601.zip
More lsp support
This makes the LSP support complete for now: - Completion - Diagnostics - Goto implementation/declaration - Rename - Documentation - Find references
Diffstat (limited to 'test/assert.c')
-rw-r--r--test/assert.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/test/assert.c b/test/assert.c
index b252d36..2fa8a89 100644
--- a/test/assert.c
+++ b/test/assert.c
@@ -1,20 +1,47 @@
#include "assert.h"
#include <signal.h>
+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-void assert(bool cond, const char *cond_str, const char *file, int line,
- const char *msg) {
+static void assert_internal(bool cond, const char *cond_str, const char *file,
+ int line, const char *msg, va_list args) {
if (!cond) {
- printf("\n%s:%d: assert failed (%s): %s\n", file, line, cond_str, msg);
+ va_list args2;
+ va_copy(args2, args);
+
+ ssize_t res = vsnprintf(NULL, 0, msg, args);
+ char *buf = (char *)msg;
+
+ if (res != -1) {
+ buf = malloc(res + 1);
+ vsnprintf(buf, res + 1, msg, args2);
+ }
+
+ va_end(args);
+
+ printf("\n%s:%d: assert failed (%s): %s\n", file, line, cond_str, buf);
+
+ if (buf != msg) {
+ free(buf);
+ }
raise(SIGABRT);
}
}
+void assert(bool cond, const char *cond_str, const char *file, int line,
+ const char *msg, ...) {
+ va_list args;
+ va_start(args, msg);
+ assert_internal(cond, cond_str, file, line, msg, args);
+}
+
void assert_streq(const char *left, const char *right, const char *file,
- int line, const char *msg) {
- assert(strcmp(left, right) == 0, "<left string> == <right string>", file,
- line, msg);
+ int line, const char *msg, ...) {
+ va_list args;
+ va_start(args, msg);
+ assert_internal(strcmp(left, right) == 0, "<left string> == <right string>",
+ file, line, msg, args);
}