sort: check global flags on fallback sort
authorBartosz Golaszewski <bartekgola@gmail.com>
Sun, 19 Jan 2014 08:10:14 +0000 (09:10 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 19 Jan 2014 08:10:14 +0000 (09:10 +0100)
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@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/sort.c
testsuite/sort.tests

index 0b3b650c9de140163afcb451bef08da9721ebab4..1cb4c3e3ff5ae9e7e9ed51cdfaa529e5c313707b 100644 (file)
@@ -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;
 }
 
index 91b282ea06349949ff8e2780601e87d061c41402..68fa3e405c88c36cbef2e40e717f212a98fdc812 100755 (executable)
@@ -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