From 3afffc2a59cfc3888a84b2b2305b5312393ff4e8 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Wed, 6 Nov 2019 10:44:26 +0100 Subject: Remove raw file descriptors from unpack write paths Instead, use stdio FILE pointers. On POSIX systems, use fileno to get the file descriptor and hopefully create sparase files. Signed-off-by: David Oberhollenzer --- unpack/fill_files.c | 13 +++++++------ unpack/rdsquashfs.c | 3 +-- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'unpack') diff --git a/unpack/fill_files.c b/unpack/fill_files.c index e6444b2..d22e9d1 100644 --- a/unpack/fill_files.c +++ b/unpack/fill_files.c @@ -136,11 +136,11 @@ static int gen_file_list_dfs(const sqfs_tree_node_t *n) static int fill_files(sqfs_data_reader_t *data, int flags) { size_t i; - int fd; + FILE *fp; for (i = 0; i < num_files; ++i) { - fd = open(files[i].path, O_WRONLY); - if (fd < 0) { + fp = fopen(files[i].path, "wb"); + if (fp == NULL) { fprintf(stderr, "unpacking %s: %s\n", files[i].path, strerror(errno)); return -1; @@ -150,13 +150,14 @@ static int fill_files(sqfs_data_reader_t *data, int flags) printf("unpacking %s\n", files[i].path); if (sqfs_data_reader_dump(files[i].path, data, files[i].inode, - fd, block_size, + fp, block_size, (flags & UNPACK_NO_SPARSE) == 0)) { - close(fd); + fclose(fp); return -1; } - close(fd); + fflush(fp); + fclose(fp); } return 0; diff --git a/unpack/rdsquashfs.c b/unpack/rdsquashfs.c index 5ef367b..2f84264 100644 --- a/unpack/rdsquashfs.c +++ b/unpack/rdsquashfs.c @@ -128,8 +128,7 @@ int main(int argc, char **argv) } if (sqfs_data_reader_dump(opt.cmdpath, data, n->inode, - STDOUT_FILENO, - super.block_size, false)) { + stdout, super.block_size, false)) { goto out; } break; -- cgit v1.2.3