summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buffer.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/buffer.c b/buffer.c
index 740e598..15d89f8 100644
--- a/buffer.c
+++ b/buffer.c
@@ -160,11 +160,18 @@ static int flow(struct Lines *hard, int cols, const struct Line *soft) {
wrapStyle = style;
}
- n = mbtowc(&wc, wrap, strlen(wrap));
- if (n < 0) {
- n = 1;
- } else if (!iswspace(wc)) {
- n = 0;
+ n = 0;
+ len = strlen(wrap);
+ for (int m; wrap[n] && (m = mbtowc(&wc, &wrap[n], len - n)); n += m) {
+ if (m < 0) {
+ m = 1;
+ } else if (!iswspace(wc)) {
+ break;
+ }
+ }
+ if (!wrap[n]) {
+ *wrap = '\0';
+ break;
}
flowed++;