diff options
author | Anand Jain <anand.jain@oracle.com> | 2016-03-21 15:21:01 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-03-30 16:25:13 +0200 |
commit | a5dbd2064ef8a9b78eb0c2819b4d432623e1917d (patch) | |
tree | bac5860cfe09af9c77eb0e6533e8456ec24055af /utils.c | |
parent | 906dfb9e387812484718c981b7ec2ffbb9e892be (diff) |
btrfs-progs: move test_issubvolume() to utils.c
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -3151,3 +3151,30 @@ int test_issubvolname(const char *name) return name[0] != '\0' && !strchr(name, '/') && strcmp(name, ".") && strcmp(name, ".."); } + +/* + * Test if path is a subvolume + * Returns: + * 0 - path exists but it is not a subvolume + * 1 - path exists and it is a subvolume + * < 0 - error + */ +int test_issubvolume(const char *path) +{ + struct stat st; + struct statfs stfs; + int res; + + res = stat(path, &st); + if (res < 0) + return -errno; + + if (st.st_ino != BTRFS_FIRST_FREE_OBJECTID || !S_ISDIR(st.st_mode)) + return 0; + + res = statfs(path, &stfs); + if (res < 0) + return -errno; + + return (int)stfs.f_type == BTRFS_SUPER_MAGIC; +} |