commit 57d220b3dc49e748c9a53304eb288d9e5d268139
parent aa8112a408936ac161f1833ae766e6c68738dc50
Author: Quentin Rameau <quinq+hackers@fifth.space>
Date: Sun, 1 Nov 2015 18:12:25 +0100
ls: fix entities arrays handling in main()
Entities arrays in main() were arrays of pointer to entities and were
not compatible with entcmp().
They have been changed to being arrays of entities.
Thanks to Michael Forney <mforney@mforney.org> for having seen that.
Diffstat:
M | ls.c | | | 30 | +++++++++++++++--------------- |
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git 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 {
@@ -438,26 +438,24 @@ main(int argc, char *argv[])
case 0: /* fallthrough */
*--argv = ".", ++argc;
case 1:
- ent = emalloc(sizeof(*ent));
- mkent(ent, argv[0], 1, Hflag || Lflag);
- ls("", ent, (!dflag && S_ISDIR(ent->mode)) ||
- ((S_ISLNK(ent->mode) && S_ISDIR(ent->tmode)) &&
+ mkent(&ent, argv[0], 1, Hflag || Lflag);
+ ls("", &ent, (!dflag && S_ISDIR(ent.mode)) ||
+ ((S_ISLNK(ent.mode) && S_ISDIR(ent.tmode)) &&
((Hflag || Lflag) || !(dflag || Fflag || lflag))));
break;
default:
for (i = ds = fs = 0, fents = dents = NULL; i < argc; ++i) {
- ent = emalloc(sizeof(*ent));
- mkent(ent, argv[i], 1, Hflag || Lflag);
+ mkent(&ent, argv[i], 1, Hflag || Lflag);
- if ((!dflag && S_ISDIR(ent->mode)) ||
- ((S_ISLNK(ent->mode) && S_ISDIR(ent->tmode)) &&
+ 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));
+ memcpy(&dents[ds - 1], &ent, sizeof(ent));
} else {
- fents = ereallocarray(fents, ++fs, sizeof(ent));
- fents[fs - 1] = ent;
+ fents = ereallocarray(fents, ++fs, sizeof(*fents));
+ memcpy(&fents[fs - 1], &ent, sizeof(ent));
}
}
@@ -465,11 +463,13 @@ main(int argc, char *argv[])
qsort(dents, ds, sizeof(ent), entcmp);
for (i = 0; i < fs; ++i)
- ls("", fents[i], 0);
+ ls("", &fents[i], 0);
+ free(fents);
if (fs && ds)
putchar('\n');
for (i = 0; i < ds; ++i)
- ls("", dents[i], 1);
+ ls("", &dents[i], 1);
+ free(dents);
}
return fshut(stdout, "<stdout>");