summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
authorGui Hecheng <guihc.fnst@cn.fujitsu.com>2014-07-31 11:23:44 +0800
committerDavid Sterba <dsterba@suse.cz>2014-08-22 15:07:03 +0200
commiteb39e765f1c7f001f8b55c443a9878b2bc9ff6f7 (patch)
treeeebbc0c5b8078777305d279797bf3612e176956a /utils.c
parent508e9ac82732612138ffc79229d5dc76c2200f91 (diff)
btrfs-progs: fix improper return value check for is_existing_blk_or_reg_file
The function @is_existing_blk_or_reg_file has a return value of -errno, which indicate the @stat call fails with non-ENOENT errors. In this condition, we should not continue the following work. But -errno evaluates to true and will let the following work go. So we should judge more accurately whether the return value of @is_existing_blk_or_reg_file is > 0 or not to decide our behavior. Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/utils.c b/utils.c
index 481e0619..4f17583b 100644
--- a/utils.c
+++ b/utils.c
@@ -1563,22 +1563,29 @@ int get_label(const char *btrfs_dev, char *label)
{
int ret;
- if (is_existing_blk_or_reg_file(btrfs_dev))
- ret = get_label_unmounted(btrfs_dev, label);
- else
+ ret = is_existing_blk_or_reg_file(btrfs_dev);
+ if (!ret)
ret = get_label_mounted(btrfs_dev, label);
+ else if (ret > 0)
+ ret = get_label_unmounted(btrfs_dev, label);
return ret;
}
int set_label(const char *btrfs_dev, const char *label)
{
+ int ret;
+
if (check_label(label))
return -1;
- return is_existing_blk_or_reg_file(btrfs_dev) ?
- set_label_unmounted(btrfs_dev, label) :
- set_label_mounted(btrfs_dev, label);
+ ret = is_existing_blk_or_reg_file(btrfs_dev);
+ if (!ret)
+ ret = set_label_mounted(btrfs_dev, label);
+ else if (ret > 0)
+ ret = set_label_unmounted(btrfs_dev, label);
+
+ return ret;
}
int btrfs_scan_block_devices(int run_ioctl)