diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2020-11-26 21:47:31 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2020-11-28 11:33:18 -0500 |
commit | c7c8a03a3783cfeb342f033a7cac0dcbe948bbb9 (patch) | |
tree | d41b20ca530e8193b83d5046cb677c0bdd845649 /eval.c | |
parent | 457fcee54828527ee2a6819cac2b51892b673069 (diff) | |
download | bfs-c7c8a03a3783cfeb342f033a7cac0dcbe948bbb9.tar.xz |
eval: Make -hidden behave consistently
Previously there was an unexpected difference between
$ bfs .hidden -hidden
and
$ bfs ./.hidden -hidden
./.hidden
The intent of the code was to avoid considering `.`, the default
starting point, as hidden and thus pruning a whole search with
-nohidden. Fix it to do that explicitly, and handle `..` too.
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -467,7 +467,14 @@ bool eval_fstype(const struct expr *expr, struct eval_state *state) { */ bool eval_hidden(const struct expr *expr, struct eval_state *state) { const struct BFTW *ftwbuf = state->ftwbuf; - return ftwbuf->nameoff > 0 && ftwbuf->path[ftwbuf->nameoff] == '.'; + const char *name = ftwbuf->path + ftwbuf->nameoff; + + // Don't treat "." or ".." as hidden directories. Otherwise we'd filter + // out everything when given + // + // $ bfs . -nohidden + // $ bfs .. -nohidden + return name[0] == '.' && strcmp(name, ".") != 0 && strcmp(name, "..") != 0; } /** |