From 0a0cbefc6ebb6174aad3e6f0b8a6dea87aed49da Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Fri, 4 Sep 2020 19:26:31 +0200 Subject: Remodel file extraction tools to use libfstream This commit rewrites the libtar write paths to use libfstream insead of a FILE pointer. Also, the libcommon file extraction function is remodeled to use libfstream. In accordance, rdsquashfs, sqfs2tar and sqfsdiff have some minor adjustments made to work with the ported libtar and libcommon. Signed-off-by: David Oberhollenzer --- include/common.h | 3 ++- include/tar.h | 15 ++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/include/common.h b/include/common.h index 196f774..8639558 100644 --- a/include/common.h +++ b/include/common.h @@ -28,6 +28,7 @@ #include "sqfs/dir.h" #include "sqfs/io.h" +#include "fstream.h" #include "compat.h" #include "fstree.h" #include "tar.h" @@ -111,7 +112,7 @@ char *sqfs_tree_node_get_path(const sqfs_tree_node_t *node); int sqfs_data_reader_dump(const char *name, sqfs_data_reader_t *data, const sqfs_inode_generic_t *inode, - FILE *fp, size_t block_size, bool allow_sparse); + ostream_t *fp, size_t block_size); sqfs_file_t *sqfs_get_stdin_file(FILE *fp, const sparse_map_t *map, sqfs_u64 size); diff --git a/include/tar.h b/include/tar.h index f235d08..38ec656 100644 --- a/include/tar.h +++ b/include/tar.h @@ -9,6 +9,7 @@ #include "config.h" #include "compat.h" +#include "fstream.h" #include #include @@ -122,11 +123,11 @@ typedef struct { The counter is an incremental record counter used if additional headers need to be generated. */ -int write_tar_header(FILE *fp, const struct stat *sb, const char *name, +int write_tar_header(ostream_t *fp, const struct stat *sb, const char *name, const char *slink_target, const tar_xattr_t *xattr, unsigned int counter); -int write_hard_link(FILE *fp, const struct stat *sb, const char *name, +int write_hard_link(ostream_t *fp, const struct stat *sb, const char *name, const char *target, unsigned int counter); /* calcuate and skip the zero padding */ @@ -145,7 +146,7 @@ void clear_header(tar_header_decoded_t *hdr); Write zero bytes to an output file to padd it to the tar record size. Returns 0 on success. On failure, prints error message to stderr. */ -int padd_file(FILE *fp, sqfs_u64 size); +int padd_file(ostream_t *fp, sqfs_u64 size); /* @@ -156,12 +157,4 @@ int padd_file(FILE *fp, sqfs_u64 size); */ int read_retry(const char *errstr, FILE *fp, void *buffer, size_t size); -/* - A wrapper around the write() system call. It retries the write if it is - interrupted by a signal or only part of the data was written. Returns 0 - on success. Writes to stderr on failure using 'errstr' as a perror style - error prefix. -*/ -int write_retry(const char *errstr, FILE *fp, const void *data, size_t size); - #endif /* TAR_H */ -- cgit v1.2.3