[git commit] sort: check global flags on fallback sort

Denys Vlasenko vda.linux at googlemail.com
Sun Jan 19 08:10:14 UTC 2014


commit: http://git.busybox.net/busybox/commit/?id=5c13ab41bb9472b792797a339f93a3a3ca62fd7a
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Sort now performs global reverse on fallback sort if -r is set. Before
only key local flags were checked.

function                                             old     new   delta
compare_keys                                         712     738     +26

Signed-off-by: Bartosz Golaszewski <bartekgola at gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/sort.c     |    8 ++++++--
 testsuite/sort.tests |    3 ---
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/coreutils/sort.c b/coreutils/sort.c
index 0b3b650..1cb4c3e 100644
--- a/coreutils/sort.c
+++ b/coreutils/sort.c
@@ -302,10 +302,14 @@ static int compare_keys(const void *xarg, const void *yarg)
 	} /* for */
 
 	/* Perform fallback sort if necessary */
-	if (!retval && !(option_mask32 & FLAG_s))
+	if (!retval && !(option_mask32 & FLAG_s)) {
 		retval = strcmp(*(char **)xarg, *(char **)yarg);
+		flags = option_mask32;
+	}
+
+	if (flags & FLAG_r)
+		return -retval;
 
-	if (flags & FLAG_r) return -retval;
 	return retval;
 }
 
diff --git a/testsuite/sort.tests b/testsuite/sort.tests
index 91b282e..68fa3e4 100755
--- a/testsuite/sort.tests
+++ b/testsuite/sort.tests
@@ -47,8 +47,6 @@ egg	1	2	papyrus
 999	3	0	algebra
 " "$data" ""
 
-test x"$SKIP_KNOWN_BUGS" = x"" && {
-# Busybox is definitely doing these wrong.  FIXME
 testing "sort key range with numeric option and global reverse" \
 "sort -k2,3n -r input" \
 "egg	1	2	papyrus
@@ -65,7 +63,6 @@ testing "sort key range with multiple options" "sort -k2,3rn input" \
 42	1	3	woot
 egg	1	2	papyrus
 " "$data" ""
-}
 
 testing "sort key range with two -k options" "sort -k 2,2n -k 1,1r input" "\
 d 2


More information about the busybox-cvs mailing list