From b938d8966c3d1afec9730d403fd6a6eb4d856b85 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Sun, 13 Aug 2017 00:45:32 -0700
Subject: [PATCH] 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.
Reported by A. Wilcox.
---
src/sort.c | 17 +++++++++--------
tests/misc/sort-debug-warn.sh | 9 +++++++--
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/src/sort.c b/src/sort.c
index 015e40e..ba6ceac 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -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);
}
diff --git a/tests/misc/sort-debug-warn.sh b/tests/misc/sort-debug-warn.sh
index 3602c84..8119693 100755
--- a/tests/misc/sort-debug-warn.sh
+++ b/tests/misc/sort-debug-warn.sh
@@ -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
--
2.9.3