>From ffc6ad35ebb3bcfe598e89d86ae64170699d63a8 Mon Sep 17 00:00:00 2001
From: Jakob Kramer <jakob.kra...@gmx.de>
Date: Sat, 31 Jan 2015 19:12:18 +0100
Subject: [PATCH] sort: support sorting decimal numbers correctly

sorry not to have used strtold from the beginning
---
 sort.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

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;
-- 
1.9.1

Reply via email to