[hackers] [sbase] ls: Fix sorting of named entries || Michael Forney

From: <git_AT_suckless.org>
Date: Sun, 1 Nov 2015 10:36:46 +0100 (CET)

commit 674d1636f858d7c81cdd695634620706a25a37b7
Author: Michael Forney <mforney_AT_mforney.org>
AuthorDate: Sat Oct 31 13:01:09 2015 -0700
Commit: sin <sin_AT_2f30.org>
CommitDate: Sun Nov 1 09:36:41 2015 +0000

    ls: Fix sorting of named entries
    
    Previously, entcmp was being passed struct entry **, when it expected
    struct entry *.
    
    Many autoconf-generated configure scripts use `ls -t` to determine whether or
    not the system clock is behaving correctly. If they are sorted in the wrong
    order, it produces an error.
    
      checking whether build environment is sane... configure: error: newly created file is older than distributed files!
      Check your system clock

diff --git a/ls.c b/ls.c
index c998fc7..c942930 100644
--- a/ls.c
+++ b/ls.c
_AT_@ -358,7 +358,7 @@ usage(void)
 int
 main(int argc, char *argv[])
 {
- struct entry *ent, **dents, **fents;
+ struct entry *ent, *dents, *fents;
         size_t i, ds, fs;
 
         ARGBEGIN {
_AT_@ -447,29 +447,27 @@ main(int argc, char *argv[])
                 break;
         default:
                 for (i = ds = fs = 0, fents = dents = NULL; i < argc; ++i) {
- ent = emalloc(sizeof(*ent));
- mkent(ent, argv[i], 1, Hflag || Lflag);
-
                         if ((!dflag && S_ISDIR(ent->mode)) ||
                             ((S_ISLNK(ent->mode) && S_ISDIR(ent->tmode)) &&
                             ((Hflag || Lflag) || !(dflag || Fflag || lflag)))) {
- dents = ereallocarray(dents, ++ds, sizeof(ent));
- dents[ds - 1] = ent;
+ dents = ereallocarray(dents, ++ds, sizeof(*dents));
+ ent = &dents[ds - 1];
                         } else {
- fents = ereallocarray(fents, ++fs, sizeof(ent));
- fents[fs - 1] = ent;
+ fents = ereallocarray(fents, ++fs, sizeof(*fents));
+ ent = &fents[fs - 1];
                         }
+ mkent(ent, argv[i], 1, Hflag || Lflag);
                 }
 
- qsort(fents, fs, sizeof(ent), entcmp);
- qsort(dents, ds, sizeof(ent), entcmp);
+ qsort(fents, fs, sizeof(*fents), entcmp);
+ qsort(dents, ds, sizeof(*dents), entcmp);
 
                 for (i = 0; i < fs; ++i)
- ls("", fents[i], 0);
+ ls("", &fents[i], 0);
                 if (fs && ds)
                         putchar('\n');
                 for (i = 0; i < ds; ++i)
- ls("", dents[i], 1);
+ ls("", &dents[i], 1);
         }
 
         return fshut(stdout, "<stdout>");
Received on Sun Nov 01 2015 - 10:36:46 CET

This archive was generated by hypermail 2.3.0 : Sun Nov 01 2015 - 10:48:15 CET