From 6e6188765a24b2380f2a9cc709c7fccdfd294015 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 5 Feb 2003 15:08:15 +0000 Subject: [PATCH] (process_entry): When using FTW_DEPTH, call `func', the user-supplied callback, once before any of its entries, in case that part of the hierarchy should be pruned. `func' does that by setting `data->skip'. --- lib/ftw.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/ftw.c b/lib/ftw.c index 8f2c2a8..3928cda 100644 --- a/lib/ftw.c +++ b/lib/ftw.c @@ -406,11 +406,20 @@ process_entry (struct ftw_data *data, struct dir_data *dir, const char *name, /* Remember the object. */ && (result = add_object (data, &st)) == 0)) { - result = ftw_dir (data, &st); + /* When processing a directory as part of a depth-first traversal, + invoke the users callback function with type=FTW_DPRE + just before processing any entry in that directory. + And if the callback sets ftw.skip, then don't process + any entries of the directory. */ + if ((data->flags & FTW_DEPTH) + && (result = (*data->func) (data->dirbuf, &st, FTW_DPRE, + &data->ftw)) == 0 + && ! data->ftw.skip) + result = ftw_dir (data, &st); if (result == 0 && (data->flags & FTW_CHDIR)) { - /* Change back to current directory. */ + /* Change back to parent directory. */ int done = 0; if (dir->stream != NULL) if (__fchdir (dirfd (dir->stream)) == 0) -- 2.7.4