From aa8344e04bfe950cc9f5e45352cd8202295e0cdf Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 16 Dec 2023 11:54:18 -0500 Subject: bfstd: New xwcwidth() wrapper --- src/bfstd.c | 2 +- src/bfstd.h | 5 +++++ src/eval.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/bfstd.c b/src/bfstd.c index 9ffa8e6..a3e22f5 100644 --- a/src/bfstd.c +++ b/src/bfstd.c @@ -658,7 +658,7 @@ size_t xstrwidth(const char *str) { // Assume a single-width '?' ++ret; } else { - ret += BFS_INTERCEPT(wcwidth)(wc); + ret += xwcwidth(wc); } } diff --git a/src/bfstd.h b/src/bfstd.h index 58e504c..0fcb892 100644 --- a/src/bfstd.h +++ b/src/bfstd.h @@ -390,6 +390,11 @@ wint_t xmbrtowc(const char *str, size_t *i, size_t len, mbstate_t *mb); */ size_t xstrwidth(const char *str); +/** + * wcwidth() wrapper that works around LLVM bug #65532. + */ +#define xwcwidth BFS_INTERCEPT(wcwidth) + #include /** diff --git a/src/eval.c b/src/eval.c index 55b14f0..a990fd4 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1154,7 +1154,7 @@ static void eval_status(struct bfs_eval *state, struct bfs_bar *bar, struct time // Invalid byte sequence, assume a single-width '?' cwidth = 1; } else { - cwidth = wcwidth(wc); + cwidth = xwcwidth(wc); if (cwidth < 0) { cwidth = 0; } -- cgit v1.2.3