commit f3a17f015998ec148820ef8feeae5698d20e9f89
Author: Jakob Kramer <[email protected]>
Date:   Sat Jan 31 19:12:18 2015 +0100

    sort: support sorting decimal numbers correctly
    
    sorry not to have used strtold from the beginning

diff --git a/sort.c b/sort.c
index d46a84b..31c3f7d 100644
--- a/sort.c
+++ b/sort.c
@@ -168,6 +168,7 @@ linecmp(const char **a, const char **b)
 {
        char *s1, *s2;
        int res = 0;
+       long double x, y;
        struct kdlist *node;
 
        for (node = head; node && res == 0; node = node->next) {
@@ -176,12 +177,15 @@ linecmp(const char **a, const char **b)
 
                /* if -u is given, don't use default key definition
                 * unless it is the only one */
-               if (uflag && node == tail && head != tail)
+               if (uflag && node == tail && head != tail) {
                        res = 0;
-               else if (node->keydef.flags & MOD_N)
-                       res = strtol(s1, 0, 10) - strtol(s2, 0, 10);
-               else
+               } else if (node->keydef.flags & MOD_N) {
+                       x = strtold(s1, NULL);
+                       y = strtold(s2, NULL);
+                       res = x < y ? -1 : x > y;
+               } else {
                        res = strcmp(s1, s2);
+               }
 
                if (node->keydef.flags & MOD_R)
                        res = -res;

Reply via email to