diff options
Diffstat (limited to 'unpack/fill_files.c')
-rw-r--r-- | unpack/fill_files.c | 39 |
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); +} |