summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sort.c10
-rwxr-xr-xtests/misc/sort-debug-warn5
2 files changed, 9 insertions, 6 deletions
diff --git a/src/sort.c b/src/sort.c
index 8a9309aa8..e6cc2c27c 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -2261,8 +2261,14 @@ key_warnings (struct keyfield const *gkey, bool gkey_only)
error (0, 0, _("key %lu has zero width and will be ignored"), keynum);
/* Warn about significant leading blanks. */
- if (!gkey_only && tab == TAB_DEFAULT && !key->skipsblanks
- && !key_numeric (key) && !key->month)
+ bool implicit_skip = key_numeric (key) || key->month;
+ bool maybe_space_aligned = !hard_LC_COLLATE && default_key_compare (key)
+ && !(key->schar || key->echar);
+ bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */
+ if (!gkey_only && tab == TAB_DEFAULT && !line_offset
+ && ((!key->skipsblanks && !(implicit_skip || maybe_space_aligned))
+ || (!key->skipsblanks && key->schar)
+ || (!key->skipeblanks && key->echar)))
error (0, 0, _("leading blanks are significant in key %lu; "
"consider also specifying `b'"), keynum);
diff --git a/tests/misc/sort-debug-warn b/tests/misc/sort-debug-warn
index 3a7b01a0c..1ba6c0479 100755
--- a/tests/misc/sort-debug-warn
+++ b/tests/misc/sort-debug-warn
@@ -26,7 +26,6 @@ fi
cat <<\EOF > exp
sort: using simple byte comparison
sort: key 1 has zero width and will be ignored
-sort: leading blanks are significant in key 1; consider also specifying `b'
sort: using simple byte comparison
sort: options `-bghMRrV' are ignored
sort: using simple byte comparison
@@ -35,14 +34,12 @@ sort: option `-r' only applies to last-resort comparison
sort: using simple byte comparison
sort: option `-r' only applies to last-resort comparison
sort: using simple byte comparison
-sort: leading blanks are significant in key 2; consider also specifying `b'
sort: options `-bg' are ignored
sort: using simple byte comparison
sort: using simple byte comparison
sort: option `-b' is ignored
sort: using simple byte comparison
sort: using simple byte comparison
-sort: leading blanks are significant in key 1; consider also specifying `b'
sort: using simple byte comparison
sort: leading blanks are significant in key 1; consider also specifying `b'
sort: using simple byte comparison
@@ -84,7 +81,7 @@ sort: option `-b' is ignored
sort: option `-r' only applies to last-resort comparison
EOF
-sort --debug -rb -k2n +2 -1b /dev/null 2>out
+sort --debug -rb -k2n +2.2 -1b /dev/null 2>out
compare exp out || fail=1