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
---
 ls.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/ls.c b/ls.c
index c998fc7..c942930 100644
--- a/ls.c
+++ b/ls.c
@@ -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 {
@@ -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>");
-- 
1.8.5.1


Reply via email to