sbase

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

commit 75611997f9c66d67faf6f909e37262c7cfb1e4c0
parent d4f7ecd334cb666d2b58d80b40fe95d9b89f6716
Author: Michael Forney <mforney@mforney.org>
Date:   Sat, 12 Mar 2016 11:46:31 -0800

sort: Fix -c option

In eb9bda878736344d1bef06d42e57e96de542a663, a bug was introduced in the
handling of -1 return values from getline. Since the type of the len
field in struct line is unsigned, the break condition was never true.
This caused sort -c to never succeed.

Diffstat:
Msort.c | 11++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/sort.c b/sort.c @@ -210,10 +210,15 @@ check(FILE *fp, const char *fname) { static struct line prev, cur, tmp; static size_t prevsize, cursize, tmpsize; + ssize_t len; - if (!prev.data && (prev.len = getline(&prev.data, &prevsize, fp)) < 0) - eprintf("getline:"); - while ((cur.len = getline(&cur.data, &cursize, fp)) > 0) { + if (!prev.data) { + if ((len = getline(&prev.data, &prevsize, fp)) < 0) + eprintf("getline:"); + prev.len = len; + } + while ((len = getline(&cur.data, &cursize, fp)) > 0) { + cur.len = len; if (uflag > slinecmp(&cur, &prev)) { if (!Cflag) { weprintf("disorder %s: ", fname);