From 667ef15da836a9e055e92349b47ec3a582603826 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Mon, 2 Mar 2026 12:58:37 +0200 Subject: inf: Fix trunc of wide chars --- dfm.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/dfm.c b/dfm.c index 27286d7..20be355 100644 --- a/dfm.c +++ b/dfm.c @@ -1295,8 +1295,15 @@ fm_draw_pwd(struct fm *p, s32 vw) if (i < p->pwd.l && p->pwd.m[i] == '/') i++; usize tl = p->pwd.l - i; const char *tp = p->pwd.m + i; - if (tl + DFM_TRUNC_WIDTH + 1 < (usize)vw) { - usize av = (usize)vw - tl - DFM_TRUNC_WIDTH - 2; + usize tw, tb; + if (utf8) { + tb = fm_cache_trunc_utf8(p, tp, tl, (usize)vw, &tw); + } else { + tb = MIN(tl, (usize)vw); + tw = tb; + } + if (tw + DFM_TRUNC_WIDTH + 1 < (usize)vw) { + usize av = (usize)vw - tw - DFM_TRUNC_WIDTH - 2; usize bl; if (utf8) { usize oc; @@ -1308,17 +1315,11 @@ fm_draw_pwd(struct fm *p, s32 vw) STR_PUSH(&p->io, DFM_TRUNC_STR "/"); if (ctrl) str_push_sanitize(&p->io, tp, tl); else str_push(&p->io, tp, tl); - return bl + DFM_TRUNC_WIDTH + tl; + return bl + DFM_TRUNC_WIDTH + tw; } else { - usize bl; - if (utf8) { - usize oc; - bl = fm_cache_trunc_utf8(p, tp, tl, (usize)vw, &oc); - } else - bl = MIN(tl, (usize)vw); - if (ctrl) str_push_sanitize(&p->io, tp, bl); - else str_push(&p->io, tp, bl); - return bl; + if (ctrl) str_push_sanitize(&p->io, tp, tb); + else str_push(&p->io, tp, tb); + return tw; } } -- cgit v1.2.3