From: Karel Zak Date: Tue, 14 Aug 2007 09:51:19 +0000 (+0200) Subject: more: fix underlining for multibyte chars X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99bd8154adb07352e5bdd9821f612c07d97b8522;p=util-linux more: fix underlining for multibyte chars Try: $ printf "aaa _\bŽ_\bŽ_\bŽ bbb\n" | more aaa ŽŽŽ bbb (ŽŽŽ has to be three underlined chars on terminal). Signed-off-by: Karel Zak --- diff --git a/text-utils/more.c b/text-utils/more.c index db2fa4d2..19c44178 100644 --- a/text-utils/more.c +++ b/text-utils/more.c @@ -1052,7 +1052,23 @@ void prbuf (register char *s, register int n) my_putstring(state ? ULenter : ULexit); } if (c != ' ' || pstate == 0 || state != 0 || ulglitch == 0) +#ifdef ENABLE_WIDECHAR + { + wchar_t wc; + size_t mblength; + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); + s--; n++; + mblength = mbrtowc (&wc, s, n, &state); + if (mblength == (size_t) -2 || mblength == (size_t) -1) + mblength = 1; + while (mblength--) + putchar (*s++); + n += mblength; + } +#else putchar(c); +#endif /* ENABLE_WIDECHAR */ if (state && *chUL) { putsout(chBS); my_putstring(chUL);