diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-09-19 14:24:33 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-09-20 03:18:47 +0200 |
commit | 03965d76aed3bad803b62bf9a683f0feaa1ae360 (patch) | |
tree | c5d21b9ceccb4a8e64268d760e23ac0a93599f71 | |
parent | 7167e775a60493b322658a482f2a47a8eb1428b5 (diff) |
sqfs2tar: pull global state out of recursive tree walking function
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
-rw-r--r-- | tar/sqfs2tar.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/tar/sqfs2tar.c b/tar/sqfs2tar.c index c38342c..253e437 100644 --- a/tar/sqfs2tar.c +++ b/tar/sqfs2tar.c @@ -81,6 +81,11 @@ static char **subdirs = NULL; static size_t num_subdirs = 0; static size_t max_subdirs = 0; +static fstree_t fs; +static data_reader_t *data; +static sqfs_file_t *file; +static sqfs_super_t super; + static void process_args(int argc, char **argv) { size_t idx, new_count; @@ -181,7 +186,7 @@ static int terminate_archive(void) buffer, sizeof(buffer)); } -static tar_xattr_t *gen_xattr_list(fstree_t *fs, tree_xattr_t *xattr) +static tar_xattr_t *gen_xattr_list(tree_xattr_t *xattr) { const char *key, *value; tar_xattr_t *list; @@ -194,9 +199,9 @@ static tar_xattr_t *gen_xattr_list(fstree_t *fs, tree_xattr_t *xattr) } for (i = 0; i < xattr->num_attr; ++i) { - key = str_table_get_string(&fs->xattr_keys, + key = str_table_get_string(&fs.xattr_keys, xattr->attr[i].key_index); - value = str_table_get_string(&fs->xattr_values, + value = str_table_get_string(&fs.xattr_values, xattr->attr[i].value_index); list[i].key = (char *)key; @@ -212,7 +217,7 @@ static tar_xattr_t *gen_xattr_list(fstree_t *fs, tree_xattr_t *xattr) return list; } -static int write_tree_dfs(fstree_t *fs, tree_node_t *n, data_reader_t *data) +static int write_tree_dfs(tree_node_t *n) { tar_xattr_t *xattr = NULL; size_t len, name_len; @@ -247,10 +252,10 @@ static int write_tree_dfs(fstree_t *fs, tree_node_t *n, data_reader_t *data) memmove(name, name + len + 1, name_len - len); } - fstree_node_stat(fs, n, &sb); + fstree_node_stat(&fs, n, &sb); if (!no_xattr && n->xattr != NULL) { - xattr = gen_xattr_list(fs, n->xattr); + xattr = gen_xattr_list(n->xattr); if (xattr == NULL) { free(name); return -1; @@ -292,7 +297,7 @@ static int write_tree_dfs(fstree_t *fs, tree_node_t *n, data_reader_t *data) skip_hdr: if (S_ISDIR(n->mode)) { for (n = n->data.dir->children; n != NULL; n = n->next) { - if (write_tree_dfs(fs, n, data)) + if (write_tree_dfs(n)) return -1; } } @@ -305,11 +310,7 @@ int main(int argc, char **argv) int rdtree_flags = 0, status = EXIT_FAILURE; sqfs_compressor_config_t cfg; sqfs_compressor_t *cmp; - data_reader_t *data; - sqfs_file_t *file; - sqfs_super_t super; tree_node_t *root; - fstree_t fs; size_t i; process_args(argc, argv); @@ -369,14 +370,14 @@ int main(int argc, char **argv) current_subdir = subdirs[i]; - if (write_tree_dfs(&fs, root, data)) + if (write_tree_dfs(root)) goto out; } current_subdir = NULL; if (num_subdirs == 0) { - if (write_tree_dfs(&fs, fs.root, data)) + if (write_tree_dfs(fs.root)) goto out; } |