summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-12-03 11:21:24 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-12-03 11:23:25 +0100
commit3207dc4608dd1afa46fcdcc0b9eb7c3a3fe22882 (patch)
treeb4bb2c99632b86bbe901113ee4c9062a2d5e2f0b
parenta912f55a6c6a9486712248ebefb053d98501a153 (diff)
downloadbarebox-3207dc4608dd1afa46fcdcc0b9eb7c3a3fe22882.tar.gz
ls command: call stat() only when necessary
When calling ls in short mode we do not have to call stat() for additional informations because we do not use them. This speeds up ls on filesystems on which stat() is expensive because the barebox filesystem support always has to iterate over the directory tree. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--commands/ls.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/commands/ls.c b/commands/ls.c
index 1fdb244..f2d9903 100644
--- a/commands/ls.c
+++ b/commands/ls.c
@@ -73,12 +73,13 @@ int ls(const char *path, ulong flags)
while ((d = readdir(dir))) {
sprintf(tmp, "%s/%s", path, d->d_name);
- if (lstat(tmp, &s))
- goto out;
- if (flags & LS_COLUMN)
+ if (flags & LS_COLUMN) {
string_list_add_sorted(&sl, d->d_name);
- else
+ } else {
+ if (lstat(tmp, &s))
+ goto out;
ls_one(d->d_name, tmp, &s);
+ }
}
closedir(dir);