From cfbbe12db970b266186775350267f163967d2ede Mon Sep 17 00:00:00 2001
From: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Date: Tue, 11 Jun 2019 17:56:09 +0200
Subject: cleanup: get rid of unsqfs_info_t

Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
 unpack/rdsquashfs.c     | 63 +++++++++++++++++++++++--------------------------
 unpack/rdsquashfs.h     | 10 +-------
 unpack/restore_fstree.c | 19 ++++++++-------
 3 files changed, 41 insertions(+), 51 deletions(-)

diff --git a/unpack/rdsquashfs.c b/unpack/rdsquashfs.c
index 7fd2947..a24d6c3 100644
--- a/unpack/rdsquashfs.c
+++ b/unpack/rdsquashfs.c
@@ -125,13 +125,14 @@ int main(int argc, char **argv)
 {
 	int i, status = EXIT_FAILURE, op = OP_NONE;
 	const char *unpack_root = NULL;
+	int rdtree_flags = 0, flags = 0;
+	data_reader_t *data = NULL;
 	char *cmdpath = NULL;
-	unsqfs_info_t info;
 	sqfs_super_t super;
+	compressor_t *cmp;
 	tree_node_t *n;
 	fstree_t fs;
-
-	memset(&info, 0, sizeof(info));
+	int sqfsfd;
 
 	for (;;) {
 		i = getopt_long(argc, argv, short_opts, long_opts, NULL);
@@ -140,25 +141,25 @@ int main(int argc, char **argv)
 
 		switch (i) {
 		case 'D':
-			info.rdtree_flags |= RDTREE_NO_DEVICES;
+			rdtree_flags |= RDTREE_NO_DEVICES;
 			break;
 		case 'S':
-			info.rdtree_flags |= RDTREE_NO_SOCKETS;
+			rdtree_flags |= RDTREE_NO_SOCKETS;
 			break;
 		case 'F':
-			info.rdtree_flags |= RDTREE_NO_FIFO;
+			rdtree_flags |= RDTREE_NO_FIFO;
 			break;
 		case 'L':
-			info.rdtree_flags |= RDTREE_NO_SLINKS;
+			rdtree_flags |= RDTREE_NO_SLINKS;
 			break;
 		case 'C':
-			info.flags |= UNPACK_CHMOD;
+			flags |= UNPACK_CHMOD;
 			break;
 		case 'O':
-			info.flags |= UNPACK_CHOWN;
+			flags |= UNPACK_CHOWN;
 			break;
 		case 'E':
-			info.rdtree_flags |= RDTREE_NO_EMPTY;
+			rdtree_flags |= RDTREE_NO_EMPTY;
 			break;
 		case 'c':
 			op = OP_CAT;
@@ -179,7 +180,7 @@ int main(int argc, char **argv)
 			cmdpath = get_path(cmdpath, optarg);
 			break;
 		case 'q':
-			info.flags |= UNPACK_QUIET;
+			flags |= UNPACK_QUIET;
 			break;
 		case 'h':
 			printf(help_string, __progname);
@@ -204,13 +205,13 @@ int main(int argc, char **argv)
 		goto fail_arg;
 	}
 
-	info.sqfsfd = open(argv[optind], O_RDONLY);
-	if (info.sqfsfd < 0) {
+	sqfsfd = open(argv[optind], O_RDONLY);
+	if (sqfsfd < 0) {
 		perror(argv[optind]);
 		goto out_cmd;
 	}
 
-	if (sqfs_super_read(&super, info.sqfsfd))
+	if (sqfs_super_read(&super, sqfsfd))
 		goto out_fd;
 
 	if ((super.version_major != SQFS_VERSION_MAJOR) ||
@@ -229,20 +230,18 @@ int main(int argc, char **argv)
 		goto out_fd;
 	}
 
-	info.cmp = compressor_create(super.compression_id, false,
-				     super.block_size, NULL);
-	if (info.cmp == NULL)
+	cmp = compressor_create(super.compression_id, false,
+				super.block_size, NULL);
+	if (cmp == NULL)
 		goto out_fd;
 
 	if (super.flags & SQFS_FLAG_COMPRESSOR_OPTIONS) {
-		if (info.cmp->read_options(info.cmp, info.sqfsfd))
+		if (cmp->read_options(cmp, sqfsfd))
 			goto out_cmp;
 	}
 
-	if (deserialize_fstree(&fs, &super, info.cmp,
-			       info.sqfsfd, info.rdtree_flags)) {
+	if (deserialize_fstree(&fs, &super, cmp, sqfsfd, rdtree_flags))
 		goto out_cmp;
-	}
 
 	switch (op) {
 	case OP_LS:
@@ -266,14 +265,12 @@ int main(int argc, char **argv)
 			goto out_fs;
 		}
 
-		info.data = data_reader_create(info.sqfsfd, &super, info.cmp);
-		if (info.data == NULL)
+		data = data_reader_create(sqfsfd, &super, cmp);
+		if (data == NULL)
 			goto out_fs;
 
-		if (data_reader_dump_file(info.data, n->data.file,
-					  STDOUT_FILENO)) {
+		if (data_reader_dump_file(data, n->data.file, STDOUT_FILENO))
 			goto out_fs;
-		}
 		break;
 	case OP_UNPACK:
 		n = find_node(fs.root, cmdpath);
@@ -282,11 +279,11 @@ int main(int argc, char **argv)
 			goto out_fs;
 		}
 
-		info.data = data_reader_create(info.sqfsfd, &super, info.cmp);
-		if (info.data == NULL)
+		data = data_reader_create(sqfsfd, &super, cmp);
+		if (data == NULL)
 			goto out_fs;
 
-		if (restore_fstree(unpack_root, n, &info))
+		if (restore_fstree(unpack_root, n, data, flags))
 			goto out_fs;
 		break;
 	case OP_DESCRIBE:
@@ -296,13 +293,13 @@ int main(int argc, char **argv)
 
 	status = EXIT_SUCCESS;
 out_fs:
-	if (info.data != NULL)
-		data_reader_destroy(info.data);
+	if (data != NULL)
+		data_reader_destroy(data);
 	fstree_cleanup(&fs);
 out_cmp:
-	info.cmp->destroy(info.cmp);
+	cmp->destroy(cmp);
 out_fd:
-	close(info.sqfsfd);
+	close(sqfsfd);
 out_cmd:
 	free(cmdpath);
 	return status;
diff --git a/unpack/rdsquashfs.h b/unpack/rdsquashfs.h
index b927bab..959960a 100644
--- a/unpack/rdsquashfs.h
+++ b/unpack/rdsquashfs.h
@@ -26,18 +26,10 @@ enum UNPACK_FLAGS {
 	UNPACK_QUIET = 0x04,
 };
 
-typedef struct {
-	data_reader_t *data;
-	compressor_t *cmp;
-	int rdtree_flags;
-	int sqfsfd;
-	int flags;
-} unsqfs_info_t;
-
 void list_files(tree_node_t *node);
 
 int restore_fstree(const char *rootdir, tree_node_t *root,
-		   unsqfs_info_t *info);
+		   data_reader_t *data, int flags);
 
 void describe_tree(tree_node_t *root, const char *unpack_root);
 
diff --git a/unpack/restore_fstree.c b/unpack/restore_fstree.c
index a39ec97..976b15c 100644
--- a/unpack/restore_fstree.c
+++ b/unpack/restore_fstree.c
@@ -1,12 +1,12 @@
 /* SPDX-License-Identifier: GPL-3.0-or-later */
 #include "rdsquashfs.h"
 
-static int create_node(tree_node_t *n, unsqfs_info_t *info)
+static int create_node(tree_node_t *n, data_reader_t *data, int flags)
 {
 	char *name;
 	int fd;
 
-	if (!(info->flags & UNPACK_QUIET)) {
+	if (!(flags & UNPACK_QUIET)) {
 		name = fstree_get_path(n);
 		printf("unpacking %s\n", name);
 		free(name);
@@ -24,7 +24,7 @@ static int create_node(tree_node_t *n, unsqfs_info_t *info)
 			return -1;
 
 		for (n = n->data.dir->children; n != NULL; n = n->next) {
-			if (create_node(n, info))
+			if (create_node(n, data, flags))
 				return -1;
 		}
 
@@ -63,7 +63,7 @@ static int create_node(tree_node_t *n, unsqfs_info_t *info)
 			return -1;
 		}
 
-		if (data_reader_dump_file(info->data, n->data.file, fd)) {
+		if (data_reader_dump_file(data, n->data.file, fd)) {
 			close(fd);
 			return -1;
 		}
@@ -74,7 +74,7 @@ static int create_node(tree_node_t *n, unsqfs_info_t *info)
 		break;
 	}
 
-	if (info->flags & UNPACK_CHOWN) {
+	if (flags & UNPACK_CHOWN) {
 		if (fchownat(AT_FDCWD, n->name, n->uid, n->gid,
 			     AT_SYMLINK_NOFOLLOW)) {
 			fprintf(stderr, "chown %s: %s\n",
@@ -83,7 +83,7 @@ static int create_node(tree_node_t *n, unsqfs_info_t *info)
 		}
 	}
 
-	if (info->flags & UNPACK_CHMOD) {
+	if (flags & UNPACK_CHMOD) {
 		if (fchmodat(AT_FDCWD, n->name, n->mode,
 			     AT_SYMLINK_NOFOLLOW)) {
 			fprintf(stderr, "chmod %s: %s\n",
@@ -94,7 +94,8 @@ static int create_node(tree_node_t *n, unsqfs_info_t *info)
 	return 0;
 }
 
-int restore_fstree(const char *rootdir, tree_node_t *root, unsqfs_info_t *info)
+int restore_fstree(const char *rootdir, tree_node_t *root,
+		   data_reader_t *data, int flags)
 {
 	tree_node_t *n;
 
@@ -108,11 +109,11 @@ int restore_fstree(const char *rootdir, tree_node_t *root, unsqfs_info_t *info)
 
 	if (S_ISDIR(root->mode)) {
 		for (n = root->data.dir->children; n != NULL; n = n->next) {
-			if (create_node(n, info))
+			if (create_node(n, data, flags))
 				return -1;
 		}
 	} else {
-		if (create_node(root, info))
+		if (create_node(root, data, flags))
 			return -1;
 	}
 
-- 
cgit v1.2.3