From 0689a4a16f5e80e0c2368f4a68c69ce5f2fdc038 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Wed, 13 Feb 2019 11:12:30 -0500 Subject: 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 --- parse.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'parse.c') 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); -- cgit v1.2.3