commit 75611997f9c66d67faf6f909e37262c7cfb1e4c0
Author:     Michael Forney <[email protected]>
AuthorDate: Sat Mar 12 11:46:31 2016 -0800
Commit:     sin <[email protected]>
CommitDate: Sun Mar 13 11:08:36 2016 +0000

    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.

diff --git a/sort.c b/sort.c
index 5cfe801..90ee911 100644
--- 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);

Reply via email to