The branch releng/14.4 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=65338ff41fcd0deb125767f550961418ab03cd82
commit 65338ff41fcd0deb125767f550961418ab03cd82 Author: Baptiste Daroussin <[email protected]> AuthorDate: 2026-02-14 05:54:08 +0000 Commit: Colin Percival <[email protected]> CommitDate: 2026-02-19 19:22:24 +0000 tr: fix class handling in unicode world toupper/tolower logic was only handled for CCLASS_TOUPPER and CCLASS_TOLOWER, add support for CCLASS ([:alpha:]) PR: 219900 MFC After: 1 week (cherry picked from commit 625dc44832cd760be3d7242d8e21a530c7e32bfc) (cherry picked from commit 45d84c2f06fa72e405f09e2468b10bdf10b806cf) --- usr.bin/tr/tr.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/usr.bin/tr/tr.c b/usr.bin/tr/tr.c index 75638d6b3bc6..0eb9003ff831 100644 --- a/usr.bin/tr/tr.c +++ b/usr.bin/tr/tr.c @@ -253,6 +253,40 @@ main(int argc, char **argv) break; } while (s2.state == CCLASS_LOWER && s2.cnt > 1); goto again; + } else if (s1.state == CCLASS && + s2.state == CCLASS_UPPER && + s1.cnt == 1 && s2.cnt == 1) { + do { + ch = towupper(s1.lastch); + cmap_add(map, s1.lastch, ch); + if (sflag && iswupper(ch)) + cset_add(squeeze, ch); + if (!next(&s1)) + goto endloop; + } while (s1.state == CCLASS && s1.cnt > 1); + /* skip upper set */ + do { + if (!next(&s2)) + break; + } while (s2.state == CCLASS_UPPER && s2.cnt > 1); + goto again; + } else if (s1.state == CCLASS && + s2.state == CCLASS_LOWER && + s1.cnt == 1 && s2.cnt == 1) { + do { + ch = towlower(s1.lastch); + cmap_add(map, s1.lastch, ch); + if (sflag && iswlower(ch)) + cset_add(squeeze, ch); + if (!next(&s1)) + goto endloop; + } while (s1.state == CCLASS && s1.cnt > 1); + /* skip lower set */ + do { + if (!next(&s2)) + break; + } while (s2.state == CCLASS_LOWER && s2.cnt > 1); + goto again; } else { cmap_add(map, s1.lastch, s2.lastch); if (sflag)
