No functional changes.
This is a preparation work for reworking "subvolume list".
Signed-off-by: Misono Tomohiro <misono.tomohiro@xxxxxxxxxxxxxx>
Signed-off-by: David Sterba <dsterba@xxxxxxxx>
---
cmds-subvolume.c | 50 +++++++++++++++++++++++++++++-------------------
1 file changed, 30 insertions(+), 20 deletions(-)
diff --git a/cmds-subvolume.c b/cmds-subvolume.c
index 84a03fd8..40cc2687 100644
--- a/cmds-subvolume.c
+++ b/cmds-subvolume.c
@@ -1128,22 +1128,15 @@ out:
return subvols;
}
-static struct subvol_list *btrfs_list_subvols(int fd,
- struct btrfs_list_filter_set_v2 *filter_set)
+static void get_subvols_info(struct subvol_list **subvols,
+ struct btrfs_list_filter_set_v2 *filter_set,
+ int fd,
+ size_t *capacity)
{
- struct subvol_list *subvols;
- size_t capacity = 0;
struct btrfs_util_subvolume_iterator *iter;
enum btrfs_util_error err;
int ret = -1;
- subvols = malloc(sizeof(*subvols));
- if (!subvols) {
- error("out of memory");
- return NULL;
- }
- subvols->num = 0;
-
err = btrfs_util_create_subvolume_iterator_fd(fd,
BTRFS_FS_TREE_OBJECTID, 0,
&iter);
@@ -1171,11 +1164,11 @@ static struct subvol_list *btrfs_list_subvols(int fd,
continue;
}
- if (subvols->num >= capacity) {
+ if ((*subvols)->num >= *capacity) {
struct subvol_list *new_subvols;
- size_t new_capacity = max_t(size_t, 1, capacity * 2);
+ size_t new_capacity = max_t(size_t, 1, *capacity * 2);
- new_subvols = realloc(subvols,
+ new_subvols = realloc(*subvols,
sizeof(*new_subvols) +
new_capacity *
sizeof(new_subvols->subvols[0]));
@@ -1184,12 +1177,12 @@ static struct subvol_list *btrfs_list_subvols(int fd,
goto out;
}
- subvols = new_subvols;
- capacity = new_capacity;
+ *subvols = new_subvols;
+ *capacity = new_capacity;
}
- subvols->subvols[subvols->num] = subvol;
- subvols->num++;
+ (*subvols)->subvols[(*subvols)->num] = subvol;
+ (*subvols)->num++;
}
ret = 0;
@@ -1197,9 +1190,26 @@ out:
if (iter)
btrfs_util_destroy_subvolume_iterator(iter);
if (ret) {
- free_subvol_list(subvols);
- subvols = NULL;
+ free_subvol_list(*subvols);
+ *subvols = NULL;
+ }
+}
+
+static struct subvol_list *btrfs_list_subvols(int fd,
+ struct btrfs_list_filter_set_v2 *filter_set)
+{
+ struct subvol_list *subvols;
+ size_t capacity = 0;
+
+ subvols = malloc(sizeof(*subvols));
+ if (!subvols) {
+ error("out of memory");
+ return NULL;
}
+ subvols->num = 0;
+
+ get_subvols_info(&subvols, filter_set, fd, &capacity);
+
return subvols;
}
--
2.19.1