summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2025-07-07 13:53:04 -0400
committerTavian Barnes <tavianator@tavianator.com>2025-07-26 14:19:52 -0400
commit1bae72d2b5bbbf7d71b1ff9a1f88fbe560d9b7ba (patch)
tree00a4841a85d59a02befc8f139c49f82fe3ac6907
parentb4e3696101b049815dac8459b2b9cb18213b489e (diff)
downloadbfs-main.tar.xz
Simplify some more macros with C23 syntaxHEADmain
-rw-r--r--src/sanity.h14
-rw-r--r--src/thread.c9
-rw-r--r--tests/ptyx.c12
3 files changed, 16 insertions, 19 deletions
diff --git a/src/sanity.h b/src/sanity.h
index be77eef..cc8043f 100644
--- a/src/sanity.h
+++ b/src/sanity.h
@@ -8,16 +8,18 @@
#ifndef BFS_SANITY_H
#define BFS_SANITY_H
+#include "bfs.h"
#include <stddef.h>
-// Call macro(ptr, size) or macro(ptr, sizeof(*ptr))
-#define SANITIZE_CALL(...) \
- SANITIZE_CALL_(__VA_ARGS__, )
+/** Get the default size for a sanitize macro call. */
+#define SANITIZE_SIZE_(ptr, size) \
+ BFS_VA_IF(size)(size)(sizeof(*ptr))
-#define SANITIZE_CALL_(macro, ptr, ...) \
- SANITIZE_CALL__(macro, ptr, __VA_ARGS__ sizeof(*(ptr)), )
+// Call macro(ptr, size) or macro(ptr, sizeof(*ptr))
+#define SANITIZE_CALL(macro, ptr, ...) \
+ SANITIZE_CALL_(macro, ptr, SANITIZE_SIZE_(ptr, __VA_ARGS__))
-#define SANITIZE_CALL__(macro, ptr, size, ...) \
+#define SANITIZE_CALL_(macro, ptr, size) \
macro(ptr, size)
#if __SANITIZE_ADDRESS__
diff --git a/src/thread.c b/src/thread.c
index b3604f8..8607bca 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -24,13 +24,12 @@
} \
} while (0)
-#define THREAD_INFALLIBLE(...) \
- THREAD_INFALLIBLE_(__VA_ARGS__, 0, )
+#define THREAD_INFALLIBLE(expr, ...) \
+ THREAD_INFALLIBLE_(expr, BFS_VA_IF(__VA_ARGS__)(__VA_ARGS__)(0))
-#define THREAD_INFALLIBLE_(expr, allowed, ...) \
+#define THREAD_INFALLIBLE_(expr, allowed) \
int err = expr; \
- bfs_verify(err == 0 || err == allowed, "%s: %s", #expr, xstrerror(err)); \
- (void)0
+ bfs_verify(err == 0 || err == allowed, "%s: %s", #expr, xstrerror(err))
int thread_create(pthread_t *thread, const pthread_attr_t *attr, thread_fn *fn, void *arg) {
THREAD_FALLIBLE(pthread_create(thread, attr, fn, arg));
diff --git a/tests/ptyx.c b/tests/ptyx.c
index 59292df..bd47699 100644
--- a/tests/ptyx.c
+++ b/tests/ptyx.c
@@ -48,20 +48,16 @@ int main(int argc, char *argv[]) {
const char *cmd = argc > 0 ? argv[0] : "ptyx";
/** Report an error message and exit. */
-#define die(...) die_(__VA_ARGS__, )
-
-#define die_(format, ...) \
+#define die(format, ...) \
do { \
- fprintf(stderr, "%s: " format "%s", cmd, __VA_ARGS__ "\n"); \
+ fprintf(stderr, "%s: " format "\n", cmd __VA_OPT__(,) __VA_ARGS__); \
exit(EXIT_FAILURE); \
} while (0)
/** Report an error code and exit. */
-#define edie(...) edie_(__VA_ARGS__, )
-
-#define edie_(format, ...) \
+#define edie(format, ...) \
do { \
- fprintf(stderr, "%s: " format ": %s\n", cmd, __VA_ARGS__ errstr()); \
+ fprintf(stderr, "%s: " format ": %s\n", cmd __VA_OPT__(,) __VA_ARGS__, errstr()); \
exit(EXIT_FAILURE); \
} while (0)