diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2019-02-13 11:12:30 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2019-03-06 23:01:19 -0800 |
commit | 0689a4a16f5e80e0c2368f4a68c69ce5f2fdc038 (patch) | |
tree | 60301a8961c72698b44291ecb0473e24c61f923a /parse.c | |
parent | 7fc960a23eab7fce9f5e0666b1a9b3f5eae832af (diff) | |
download | bfs-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.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -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); |