aboutsummaryrefslogtreecommitdiff
path: root/mkfs/mksquashfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'mkfs/mksquashfs.c')
-rw-r--r--mkfs/mksquashfs.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/mkfs/mksquashfs.c b/mkfs/mksquashfs.c
new file mode 100644
index 0000000..bc2a215
--- /dev/null
+++ b/mkfs/mksquashfs.c
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+#include "squashfs.h"
+#include "options.h"
+#include "fstree.h"
+
+#include <sys/sysmacros.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <ctype.h>
+
+static void print_tree(int level, tree_node_t *node)
+{
+ tree_node_t *n;
+ int i;
+
+ for (i = 1; i < level; ++i) {
+ fputs("| ", stdout);
+ }
+
+ if (level)
+ fputs("+- ", stdout);
+
+ if (S_ISDIR(node->mode)) {
+ fprintf(stdout, "%s/ (%u, %u, 0%o)\n", node->name,
+ node->uid, node->gid, node->mode & 07777);
+
+ for (n = node->data.dir->children; n != NULL; n = n->next) {
+ print_tree(level + 1, n);
+ }
+
+ if (node->data.dir->children != NULL) {
+ for (i = 0; i < level; ++i)
+ fputs("| ", stdout);
+
+ if (level)
+ fputc('\n', stdout);
+ }
+ } else {
+ fprintf(stdout, "%s (%u, %u, 0%o)\n", node->name,
+ node->uid, node->gid, node->mode & 07777);
+ }
+}
+
+
+int main(int argc, char **argv)
+{
+ options_t opt;
+ fstree_t fs;
+
+ process_command_line(&opt, argc, argv);
+
+ if (fstree_init(&fs, opt.blksz, opt.def_mtime, opt.def_mode,
+ opt.def_uid, opt.def_gid)) {
+ return EXIT_FAILURE;
+ }
+
+ if (fstree_from_file(&fs, opt.infile)) {
+ fstree_cleanup(&fs);
+ return EXIT_FAILURE;
+ }
+
+ fstree_sort(&fs);
+
+ print_tree(0, fs.root);
+
+ fstree_cleanup(&fs);
+ return EXIT_SUCCESS;
+}