diff options
-rw-r--r-- | cmds-inspect.c | 2 | ||||
-rw-r--r-- | utils.c | 16 | ||||
-rw-r--r-- | utils.h | 2 |
3 files changed, 16 insertions, 4 deletions
diff --git a/cmds-inspect.c b/cmds-inspect.c index d1a3a0e0..885f3abe 100644 --- a/cmds-inspect.c +++ b/cmds-inspect.c @@ -318,7 +318,7 @@ static int cmd_inspect_rootid(int argc, char **argv) if (check_argc_exact(argc - optind, 1)) usage(cmd_inspect_rootid_usage); - fd = btrfs_open_dir(argv[optind], &dirstream, 1); + fd = btrfs_open_file_or_dir(argv[optind], &dirstream, 1); if (fd < 0) { ret = -ENOENT; goto out; @@ -568,9 +568,9 @@ int open_path_or_dev_mnt(const char *path, DIR **dirstream, int verbose) /* * Do the following checks before calling open_file_or_dir(): * 1: path is in a btrfs filesystem - * 2: path is a directory + * 2: path is a directory if dir_only is 1 */ -int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) +int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only) { struct statfs stfs; struct stat st; @@ -593,7 +593,7 @@ int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) return -1; } - if (!S_ISDIR(st.st_mode)) { + if (dir_only && !S_ISDIR(st.st_mode)) { error_on(verbose, "not a directory: %s", path); return -3; } @@ -607,6 +607,16 @@ int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) return ret; } +int btrfs_open_dir(const char *path, DIR **dirstream, int verbose) +{ + return btrfs_open(path, dirstream, verbose, 1); +} + +int btrfs_open_file_or_dir(const char *path, DIR **dirstream, int verbose) +{ + return btrfs_open(path, dirstream, verbose, 0); +} + /* checks if a device is a loop device */ static int is_loop_device (const char* device) { struct stat statbuf; @@ -108,7 +108,9 @@ int is_block_device(const char *file); int is_mount_point(const char *file); int check_arg_type(const char *input); int open_path_or_dev_mnt(const char *path, DIR **dirstream, int verbose); +int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only); int btrfs_open_dir(const char *path, DIR **dirstream, int verbose); +int btrfs_open_file_or_dir(const char *path, DIR **dirstream, int verbose); u64 btrfs_device_size(int fd, struct stat *st); /* Helper to always get proper size of the destination string */ #define strncpy_null(dest, src) __strncpy_null(dest, src, sizeof(dest)) |