sort: handle musl locale differences in --debug reporting

* src/sort.c (main): Don't assume hard_LC_COLLATE implies
a successful setting of the locale as musl defaults to
UTF8 when failing to set the specified locale.
* tests/misc/sort-debug-warn.sh: Adjust for the now
separated locale debug info and map the musl specific
message back to the common case.
Addresses https://bugs.gnu.org/28054
This commit is contained in:
Pádraig Brady 2017-08-13 00:45:32 -07:00
parent ae15011284
commit 787a8876fa
2 changed files with 16 additions and 10 deletions

View File

@ -4675,18 +4675,19 @@ main (int argc, char **argv)
/* Always output the locale in debug mode, since this
is such a common source of confusion. */
/* OpenBSD can only set some categories with LC_ALL above,
so set LC_COLLATE explicitly to flag errors. */
if (locale_ok)
locale_ok = !! setlocale (LC_COLLATE, "");
if (! locale_ok)
error (0, 0, "%s", _("failed to set locale"));
if (hard_LC_COLLATE)
error (0, 0, _("using %s sorting rules"),
quote (setlocale (LC_COLLATE, NULL)));
else
{
/* OpenBSD can only set some categories with LC_ALL above,
so set LC_COLLATE explicitly to flag errors. */
if (locale_ok)
locale_ok = !! setlocale (LC_COLLATE, "");
error (0, 0, "%s%s", locale_ok ? "" : _("failed to set locale; "),
_("using simple byte comparison"));
}
error (0, 0, "%s", _("using simple byte comparison"));
key_warnings (&gkey, gkey_only);
}

View File

@ -71,7 +71,8 @@ sort: using simple byte comparison
17
sort: using simple byte comparison
18
sort: failed to set locale; using simple byte comparison
sort: failed to set locale
sort: using simple byte comparison
EOF
echo 1 >> out
@ -109,7 +110,11 @@ sort -rM --debug /dev/null 2>>out #no warning
echo 17 >> out
sort -rM -k1,1 --debug /dev/null 2>>out #no warning
echo 18 >> out
LC_ALL=missing sort --debug /dev/null 2>>out
LC_ALL=missing sort --debug /dev/null 2>>out.t
# musl libc accepts "missing" and implicitly uses UTF8,
# so adjust the expected message accordingly.
sed 's/using .*missing.* sorting rules/using simple byte comparison/' \
out.t >>out
compare exp out || fail=1