diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2019-06-23 10:07:49 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2019-06-25 01:18:47 -0400 |
commit | c8f7eca0eb6327e8b8ea066af55183a135818fe1 (patch) | |
tree | cffd779c202fe52cfe0b603372a33b77721214c9 /eval.c | |
parent | 8d393a4e1a37a78bccb3928379693529f78ff20e (diff) | |
download | bfs-c8f7eca0eb6327e8b8ea066af55183a135818fe1.tar.xz |
util: Filter out . and .. in xreaddir()
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 33 |
1 files changed, 8 insertions, 25 deletions
@@ -423,25 +423,13 @@ bool eval_empty(const struct expr *expr, struct eval_state *state) { goto done; } - ret = true; - - while (true) { - struct dirent *de; - if (xreaddir(dir, &de) != 0) { - eval_report_error(state); - goto done_dir; - } - if (!de) { - break; - } - - if (strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0) { - ret = false; - break; - } + struct dirent *de; + if (xreaddir(dir, &de) == 0) { + ret = !de; + } else { + eval_report_error(state); } - done_dir: closedir(dir); } else { const struct bfs_stat *statbuf = eval_stat(state); @@ -1282,14 +1270,9 @@ static int infer_fdlimit(const struct cmdline *cmdline) { // Account for 'dir' itself nopen = -1; - while (true) { - struct dirent *de; - if (xreaddir(dir, &de) != 0 || !de) { - break; - } - if (strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0) { - ++nopen; - } + struct dirent *de; + while (xreaddir(dir, &de) == 0 && de) { + ++nopen; } closedir(dir); |