summaryrefslogtreecommitdiff
path: root/unpack/fill_files.c
diff options
context:
space:
mode:
Diffstat (limited to 'unpack/fill_files.c')
-rw-r--r--unpack/fill_files.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/unpack/fill_files.c b/unpack/fill_files.c
new file mode 100644
index 0000000..6584699
--- /dev/null
+++ b/unpack/fill_files.c
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+#include "config.h"
+#include "rdsquashfs.h"
+
+static int fill_files(data_reader_t *data, file_info_t *list, int flags)
+{
+ file_info_t *fi;
+ int fd;
+
+ for (fi = list; fi != NULL; fi = fi->next) {
+ if (fi->input_file == NULL)
+ continue;
+
+ fd = open(fi->input_file, O_WRONLY);
+ if (fd < 0) {
+ fprintf(stderr, "unpacking %s: %s\n",
+ fi->input_file, strerror(errno));
+ return -1;
+ }
+
+ if (!(flags & UNPACK_QUIET))
+ printf("unpacking %s\n", fi->input_file);
+
+ if (data_reader_dump_file(data, fi, fd,
+ (flags & UNPACK_NO_SPARSE) == 0)) {
+ close(fd);
+ return -1;
+ }
+
+ close(fd);
+ }
+
+ return 0;
+}
+
+int fill_unpacked_files(fstree_t *fs, data_reader_t *data, int flags)
+{
+ return fill_files(data, fs->files, flags);
+}