sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

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:
Msort.c | 12++++++++----
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;