From ea18e30d6e4674f7b0c416c8311792d668149455 Mon Sep 17 00:00:00 2001 From: Su Yue Date: Thu, 30 Aug 2018 17:08:04 +0800 Subject: btrfs-progs: dump-tree: print invalid argument and strerror Before this patch: $ ls nothingness ls: cannot access 'nothingness': No such file or directory $ btrfs inspect-internal dump-tree nothingness ERROR: not a block device or regular file: nothingness The confusing error message makes users think that nonexistent file exiss but is of a wrong type. This patch lets check_arg_type return -errno if realpath failed. And print strerror if check_arg_type failed and the returned code is negative. Like: $ btrfs inspect-internal dump-tree nothingness ERROR: invalid argument: nothingness: No such file or directory Signed-off-by: Su Yue Signed-off-by: David Sterba --- cmds-inspect-dump-tree.c | 7 ++++++- utils.c | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cmds-inspect-dump-tree.c b/cmds-inspect-dump-tree.c index c8acd55a..d84d52dd 100644 --- a/cmds-inspect-dump-tree.c +++ b/cmds-inspect-dump-tree.c @@ -313,7 +313,12 @@ int cmd_inspect_dump_tree(int argc, char **argv) ret = check_arg_type(argv[optind]); if (ret != BTRFS_ARG_BLKDEV && ret != BTRFS_ARG_REG) { - error("not a block device or regular file: %s", argv[optind]); + if (ret < 0) + error("invalid argument %s: %s", argv[optind], + strerror(-ret)); + else + error("not a block device or regular file: %s", + argv[optind]); goto out; } diff --git a/utils.c b/utils.c index d4395b1f..785c2022 100644 --- a/utils.c +++ b/utils.c @@ -502,6 +502,8 @@ int check_arg_type(const char *input) return BTRFS_ARG_REG; return BTRFS_ARG_UNKNOWN; + } else { + return -errno; } if (strlen(input) == (BTRFS_UUID_UNPARSED_SIZE - 1) && -- cgit v1.2.3