From cc2b734fa1dd67fbd2d87a6d93825b099eb927af Mon Sep 17 00:00:00 2001 From: lauchimoon Date: Fri, 10 Jul 2026 17:31:15 -0300 Subject: [PATCH 1/2] sort: use locale_cmp when all selectors have equal ordering --- src/uu/sort/src/sort.rs | 7 +++++++ tests/by-util/test_sort.rs | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 0d0f97f591e..666971998d3 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -2799,7 +2799,14 @@ fn compare_by<'a>( { Ordering::Equal } else { + #[cfg(feature = "i18n-collator")] + { + locale_cmp(a.line, b.line) + } + #[cfg(not(feature = "i18n-collator"))] + { a.line.cmp(b.line) + } }; if global_settings.reverse { diff --git a/tests/by-util/test_sort.rs b/tests/by-util/test_sort.rs index 74b1e377ef9..8bd802d582a 100644 --- a/tests/by-util/test_sort.rs +++ b/tests/by-util/test_sort.rs @@ -303,6 +303,16 @@ fn test_numeric_with_trailing_invalid_chars() { ); } +#[test] +fn test_numeric_with_trailing_chars_and_same_number() { + new_ucmd!() + .env("LC_ALL", "en_US.UTF-8") + .arg("-n") + .pipe_in("1 x\n1 ./b\n1 a\n") + .succeeds() + .stdout_is("1 a\n1 ./b\n1 x\n"); +} + #[test] fn test_numeric_sort_rejects_leading_plus_sign() { // GNU sort -n does not treat '+' as a number sign; lines sort lexicographically. From de6f5a2de6ca71d9db73acba5e288bdf6e08d96c Mon Sep 17 00:00:00 2001 From: lauchimoon Date: Fri, 10 Jul 2026 19:10:18 -0300 Subject: [PATCH 2/2] sort: fixed style in compare_by --- src/uu/sort/src/sort.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/uu/sort/src/sort.rs b/src/uu/sort/src/sort.rs index 666971998d3..491845215ca 100644 --- a/src/uu/sort/src/sort.rs +++ b/src/uu/sort/src/sort.rs @@ -2801,11 +2801,11 @@ fn compare_by<'a>( } else { #[cfg(feature = "i18n-collator")] { - locale_cmp(a.line, b.line) + locale_cmp(a.line, b.line) } #[cfg(not(feature = "i18n-collator"))] { - a.line.cmp(b.line) + a.line.cmp(b.line) } };