summaryrefslogtreecommitdiffstats
path: root/parse.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2019-02-13 11:12:30 -0500
committerTavian Barnes <tavianator@tavianator.com>2019-03-06 23:01:19 -0800
commit0689a4a16f5e80e0c2368f4a68c69ce5f2fdc038 (patch)
tree60301a8961c72698b44291ecb0473e24c61f923a /parse.c
parent7fc960a23eab7fce9f5e0666b1a9b3f5eae832af (diff)
downloadbfs-0689a4a16f5e80e0c2368f4a68c69ce5f2fdc038.tar.xz
bftw: Work around d_type being wrong for bind mounts on Linux
C.f. https://savannah.gnu.org/bugs/?54913 C.f. https://lkml.org/lkml/2019/2/11/2027 Fixes https://github.com/tavianator/bfs/issues/37
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/parse.c b/parse.c
index f58b716..e6716eb 100644
--- a/parse.c
+++ b/parse.c
@@ -1376,11 +1376,8 @@ fail:
static struct expr *parse_fstype(struct parser_state *state, int arg1, int arg2) {
struct cmdline *cmdline = state->cmdline;
if (!cmdline->mtab) {
- cmdline->mtab = parse_bfs_mtab();
- if (!cmdline->mtab) {
- parse_error(state, "Couldn't parse the mount table: %m.\n");
- return NULL;
- }
+ parse_error(state, "Couldn't parse the mount table: %s.\n", strerror(cmdline->mtab_error));
+ return NULL;
}
struct expr *expr = parse_unary_test(state, eval_fstype);
@@ -3126,6 +3123,7 @@ struct cmdline *parse_cmdline(int argc, char *argv[]) {
cmdline->cout = NULL;
cmdline->cerr = NULL;
cmdline->mtab = NULL;
+ cmdline->mtab_error = 0;
cmdline->mindepth = 0;
cmdline->maxdepth = INT_MAX;
cmdline->flags = BFTW_RECOVER;
@@ -3162,6 +3160,11 @@ struct cmdline *parse_cmdline(int argc, char *argv[]) {
goto fail;
}
+ cmdline->mtab = parse_bfs_mtab();
+ if (!cmdline->mtab) {
+ cmdline->mtab_error = errno;
+ }
+
bool stderr_tty = cmdline->cerr->colors;
bool stdin_tty = isatty(STDIN_FILENO);