From 1bae72d2b5bbbf7d71b1ff9a1f88fbe560d9b7ba Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 7 Jul 2025 13:53:04 -0400 Subject: Simplify some more macros with C23 syntax --- src/sanity.h | 14 ++++++++------ src/thread.c | 9 ++++----- tests/ptyx.c | 12 ++++-------- 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 -// 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) -- cgit v1.2.3