aboutsummaryrefslogtreecommitdiff
path: root/lib/dirtree.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dirtree.c')
-rw-r--r--lib/dirtree.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/dirtree.c b/lib/dirtree.c
index 45ee139c..a695bb36 100644
--- a/lib/dirtree.c
+++ b/lib/dirtree.c
@@ -58,6 +58,7 @@ struct dirtree *dirtree_read(char *path, struct dirtree *parent,
if (!(dir = opendir(path))) perror_msg("No %s", path);
else for (;;) {
+ int norecurse = 0;
struct dirent *entry = readdir(dir);
if (!entry) {
closedir(dir);
@@ -74,8 +75,9 @@ struct dirtree *dirtree_read(char *path, struct dirtree *parent,
*ddt = dirtree_add_node(path);
if (!*ddt) continue;
(*ddt)->parent = parent;
- if (callback) callback(path, *ddt);
- if (entry->d_type == DT_DIR)
+ (*ddt)->depth = parent ? parent->depth + 1 : 1;
+ if (callback) norecurse = callback(path, *ddt);
+ if (!norecurse && entry->d_type == DT_DIR)
(*ddt)->child = dirtree_read(path, *ddt, callback);
if (callback) free(*ddt);
else ddt = &((*ddt)->next);