diff options
Diffstat (limited to 'lib/sqfshelper')
-rw-r--r-- | lib/sqfshelper/deserialize_fstree.c | 84 | ||||
-rw-r--r-- | lib/sqfshelper/sqfs_reader.c | 9 |
2 files changed, 10 insertions, 83 deletions
diff --git a/lib/sqfshelper/deserialize_fstree.c b/lib/sqfshelper/deserialize_fstree.c index ee06103..411711b 100644 --- a/lib/sqfshelper/deserialize_fstree.c +++ b/lib/sqfshelper/deserialize_fstree.c @@ -15,36 +15,6 @@ #include <string.h> #include <stdio.h> -static int restore_xattr(sqfs_xattr_reader_t *xr, fstree_t *fs, - tree_node_t *node, sqfs_inode_generic_t *inode) -{ - uint32_t idx; - - switch (inode->base.type) { - case SQFS_INODE_EXT_DIR: - idx = inode->data.dir_ext.xattr_idx; - break; - case SQFS_INODE_EXT_FILE: - idx = inode->data.file_ext.xattr_idx; - break; - case SQFS_INODE_EXT_SLINK: - idx = inode->data.slink_ext.xattr_idx; - break; - case SQFS_INODE_EXT_BDEV: - case SQFS_INODE_EXT_CDEV: - idx = inode->data.dev_ext.xattr_idx; - break; - case SQFS_INODE_EXT_FIFO: - case SQFS_INODE_EXT_SOCKET: - idx = inode->data.ipc_ext.xattr_idx; - break; - default: - return 0; - } - - return xattr_reader_restore_node(xr, fs, node, idx); -} - static bool node_would_be_own_parent(tree_node_t *root, tree_node_t *n) { while (root != NULL) { @@ -74,7 +44,7 @@ fail: static int fill_dir(sqfs_dir_reader_t *dr, tree_node_t *root, sqfs_id_table_t *idtbl, - fstree_t *fs, sqfs_xattr_reader_t *xr, int flags) + fstree_t *fs) { sqfs_inode_generic_t *inode; sqfs_dir_entry_t *ent; @@ -116,15 +86,6 @@ static int fill_dir(sqfs_dir_reader_t *dr, continue; } - if (flags & RDTREE_READ_XATTR) { - if (restore_xattr(xr, fs, n, inode)) { - free(n); - free(ent); - free(inode); - return -1; - } - } - free(ent); n->inode = inode; @@ -139,7 +100,7 @@ static int fill_dir(sqfs_dir_reader_t *dr, if (err) return -1; - if (fill_dir(dr, n, idtbl, fs, xr, flags)) + if (fill_dir(dr, n, idtbl, fs)) return -1; } @@ -151,10 +112,9 @@ static int fill_dir(sqfs_dir_reader_t *dr, } int deserialize_fstree(fstree_t *out, sqfs_super_t *super, - sqfs_compressor_t *cmp, sqfs_file_t *file, int flags) + sqfs_compressor_t *cmp, sqfs_file_t *file) { sqfs_inode_generic_t *root; - sqfs_xattr_reader_t *xr; sqfs_id_table_t *idtbl; sqfs_dir_reader_t *dr; int status = -1; @@ -170,22 +130,15 @@ int deserialize_fstree(fstree_t *out, sqfs_super_t *super, if (sqfs_id_table_read(idtbl, file, super, cmp)) goto out_id; - xr = sqfs_xattr_reader_create(file, super, cmp); - if (xr == NULL) - goto out_id; - - if (sqfs_xattr_reader_load_locations(xr)) - goto out_xr; - if (sqfs_dir_reader_get_root_inode(dr, &root)) - goto out_xr; + goto out_id; if (root->base.type != SQFS_INODE_DIR && root->base.type != SQFS_INODE_EXT_DIR) { free(root); fputs("File system root inode is not a directory inode!\n", stderr); - goto out_xr; + goto out_id; } memset(out, 0, sizeof(*out)); @@ -199,26 +152,7 @@ int deserialize_fstree(fstree_t *out, sqfs_super_t *super, if (out->root == NULL) { free(root); - goto out_xr; - } - - if (flags & RDTREE_READ_XATTR) { - if (str_table_init(&out->xattr_keys, - FSTREE_XATTR_KEY_BUCKETS)) { - free(root); - goto fail_fs; - } - - if (str_table_init(&out->xattr_values, - FSTREE_XATTR_VALUE_BUCKETS)) { - free(root); - goto fail_fs; - } - - if (restore_xattr(xr, out, out->root, root)) { - free(root); - goto fail_fs; - } + goto out_id; } if (sqfs_dir_reader_open_dir(dr, root)) { @@ -228,14 +162,12 @@ int deserialize_fstree(fstree_t *out, sqfs_super_t *super, free(root); - if (fill_dir(dr, out->root, idtbl, out, xr, flags)) + if (fill_dir(dr, out->root, idtbl, out)) goto fail_fs; tree_node_sort_recursive(out->root); status = 0; -out_xr: - sqfs_xattr_reader_destroy(xr); out_id: sqfs_id_table_destroy(idtbl); out_dr: @@ -243,5 +175,5 @@ out_dr: return status; fail_fs: fstree_cleanup(out); - goto out_xr; + goto out_id; } diff --git a/lib/sqfshelper/sqfs_reader.c b/lib/sqfshelper/sqfs_reader.c index e9c9c33..b947cf7 100644 --- a/lib/sqfshelper/sqfs_reader.c +++ b/lib/sqfshelper/sqfs_reader.c @@ -12,7 +12,7 @@ #include <unistd.h> #include <fcntl.h> -int sqfs_reader_open(sqfs_reader_t *rd, const char *filename, int rdtree_flags) +int sqfs_reader_open(sqfs_reader_t *rd, const char *filename) { sqfs_compressor_config_t cfg; @@ -43,13 +43,8 @@ int sqfs_reader_open(sqfs_reader_t *rd, const char *filename, int rdtree_flags) goto fail_cmp; } - if (rd->super.flags & SQFS_FLAG_NO_XATTRS) - rdtree_flags &= ~RDTREE_READ_XATTR; - - if (deserialize_fstree(&rd->fs, &rd->super, rd->cmp, rd->file, - rdtree_flags)) { + if (deserialize_fstree(&rd->fs, &rd->super, rd->cmp, rd->file)) goto fail_cmp; - } fstree_gen_file_list(&rd->fs); |