=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/less/charset.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- src/usr.bin/less/charset.c 2019/05/15 19:36:20 1.24 +++ src/usr.bin/less/charset.c 2019/08/31 13:44:29 1.25 @@ -146,6 +146,27 @@ } /* + * Like mbtowc(3), except that it converts the multibyte character + * preceding ps rather than the one starting at ps. + */ +int +mbtowc_left(wchar_t *pwc, const char *ps, size_t psz) +{ + size_t sz = 0; + int len; + + do { + if (++sz > psz) + return -1; + } while (utf_mode && IS_UTF8_TRAIL(ps[-sz])); + if ((len = mbtowc(pwc, ps - sz, sz)) == -1) { + (void)mbtowc(NULL, NULL, 0); + return -1; + } + return len == sz || (len == 0 && sz == 1) ? len : -1; +} + +/* * Is a given character a "control" character? */ static int