diff options
-rw-r--r-- | src/bfstd.c | 2 | ||||
-rw-r--r-- | src/bfstd.h | 5 | ||||
-rw-r--r-- | src/eval.c | 2 |
3 files changed, 7 insertions, 2 deletions
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 <wctype.h> /** @@ -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; } |