commit 572ad271109bf791a7a6b5b656649fae918f50b9
parent 0e01a2db9b956cfd5cc3927996f1e278a16feda9
Author: Jakob Kramer <jakob.kramer@gmx.de>
Date: Sat, 31 Jan 2015 19:12:18 +0100
sort: support sorting decimal numbers correctly
sorry not to have used strtold from the beginning
Diffstat:
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git 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;