svn commit: r290240 - projects/collation/lib/libc/locale
Baptiste Daroussin
bapt at FreeBSD.org
Sun Nov 1 21:02:32 UTC 2015
Author: bapt
Date: Sun Nov 1 21:02:30 2015
New Revision: 290240
URL: https://svnweb.freebsd.org/changeset/base/290240
Log:
locales: Fix eucJP sorting (broken upstream?)
Sorting eucJP text with "sort" resulted in an illegal sequence while
"gsort" worked. This was traced back to mbrtowc handling which was
broken for eucJP (probably eucCN, eucKR, and eucTW as well). This
small fix took hours to figure out. The OR operation to build the
wide character requires an unsigned character to work correctly. The
euc wcrtowc conversion is probably broken upstream in Illumos as well.
Triggered by: misc/freebsd-doc-ja in ports (encoded in eucJP)
Submitted by: marino
Obtained from: DragonflyBSD
Modified:
projects/collation/lib/libc/locale/euc.c
Modified: projects/collation/lib/libc/locale/euc.c
==============================================================================
--- projects/collation/lib/libc/locale/euc.c Sun Nov 1 19:59:04 2015 (r290239)
+++ projects/collation/lib/libc/locale/euc.c Sun Nov 1 21:02:30 2015 (r290240)
@@ -317,8 +317,8 @@ _EUC_mbrtowc_impl(wchar_t * __restrict p
{
_EucState *es;
int i, want;
- wchar_t wc;
- unsigned char ch;
+ wchar_t wc = 0;
+ unsigned char ch, chs;
es = (_EucState *)ps;
@@ -367,7 +367,8 @@ _EUC_mbrtowc_impl(wchar_t * __restrict p
for (i = 0; i < MIN(want, n); i++) {
wc <<= 8;
- wc |= *s;
+ chs = *s;
+ wc |= chs;
s++;
}
if (i < want) {
More information about the svn-src-projects
mailing list