summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds-inspect.c2
-rw-r--r--utils.c16
-rw-r--r--utils.h2
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;
diff --git a/utils.c b/utils.c
index 2d0ff8b3..7a2710fe 100644
--- a/utils.c
+++ b/utils.c
@@ -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;
diff --git a/utils.h b/utils.h
index 091f8fab..d28a05a6 100644
--- a/utils.h
+++ b/utils.h
@@ -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))