aboutsummaryrefslogtreecommitdiff
path: root/bin/sqfs2tar
diff options
context:
space:
mode:
Diffstat (limited to 'bin/sqfs2tar')
-rw-r--r--bin/sqfs2tar/Makemodule.am5
-rw-r--r--bin/sqfs2tar/sqfs2tar.c21
-rw-r--r--bin/sqfs2tar/sqfs2tar.h2
-rw-r--r--bin/sqfs2tar/write_tree.c2
4 files changed, 14 insertions, 16 deletions
diff --git a/bin/sqfs2tar/Makemodule.am b/bin/sqfs2tar/Makemodule.am
index f8d95cc..cd00508 100644
--- a/bin/sqfs2tar/Makemodule.am
+++ b/bin/sqfs2tar/Makemodule.am
@@ -2,8 +2,9 @@ sqfs2tar_SOURCES = bin/sqfs2tar/sqfs2tar.c bin/sqfs2tar/sqfs2tar.h
sqfs2tar_SOURCES += bin/sqfs2tar/options.c bin/sqfs2tar/write_tree.c
sqfs2tar_SOURCES += bin/sqfs2tar/xattr.c
sqfs2tar_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS)
-sqfs2tar_LDADD = libcommon.a libutil.a libsquashfs.la libtar.a libcompat.a
-sqfs2tar_LDADD += libfstree.a $(LZO_LIBS) $(PTHREAD_LIBS)
+sqfs2tar_LDADD = libcommon.a libutil.a libsquashfs.la libtar.a
+sqfs2tar_LDADD += libfstream.a libcompat.a libfstree.a
+sqfs2tar_LDADD += $(LZO_LIBS) $(PTHREAD_LIBS)
dist_man1_MANS += bin/sqfs2tar/sqfs2tar.1
bin_PROGRAMS += sqfs2tar
diff --git a/bin/sqfs2tar/sqfs2tar.c b/bin/sqfs2tar/sqfs2tar.c
index 8c5f631..c5d1201 100644
--- a/bin/sqfs2tar/sqfs2tar.c
+++ b/bin/sqfs2tar/sqfs2tar.c
@@ -9,7 +9,7 @@
sqfs_xattr_reader_t *xr;
sqfs_data_reader_t *data;
sqfs_super_t super;
-FILE *out_file = NULL;
+ostream_t *out_file = NULL;
static sqfs_file_t *file;
@@ -63,8 +63,7 @@ static int terminate_archive(void)
memset(buffer, '\0', sizeof(buffer));
- return write_retry("adding archive terminator", out_file,
- buffer, sizeof(buffer));
+ return ostream_append(out_file, buffer, sizeof(buffer));
}
static sqfs_tree_node_t *tree_merge(sqfs_tree_node_t *lhs,
@@ -118,13 +117,7 @@ int main(int argc, char **argv)
process_args(argc, argv);
-#ifdef _WIN32
- _setmode(_fileno(stdout), _O_BINARY);
- out_file = stdout;
-#else
- out_file = freopen(NULL, "wb", stdout);
-#endif
-
+ out_file = ostream_open_stdout();
if (out_file == NULL) {
perror("changing stdout to binary mode");
goto out_dirs;
@@ -133,7 +126,7 @@ int main(int argc, char **argv)
file = sqfs_open_file(filename, SQFS_FILE_OPEN_READ_ONLY);
if (file == NULL) {
perror(filename);
- goto out_dirs;
+ goto out_ostrm;
}
ret = sqfs_super_read(&super, file);
@@ -244,8 +237,10 @@ int main(int argc, char **argv)
if (terminate_archive())
goto out;
+ if (ostream_flush(out_file))
+ goto out;
+
status = EXIT_SUCCESS;
- fflush(out_file);
out:
if (root != NULL)
sqfs_dir_tree_destroy(root);
@@ -262,6 +257,8 @@ out_cmp:
sqfs_destroy(cmp);
out_fd:
sqfs_destroy(file);
+out_ostrm:
+ sqfs_destroy(out_file);
out_dirs:
for (i = 0; i < num_subdirs; ++i)
free(subdirs[i]);
diff --git a/bin/sqfs2tar/sqfs2tar.h b/bin/sqfs2tar/sqfs2tar.h
index 6eee2b1..70f51ef 100644
--- a/bin/sqfs2tar/sqfs2tar.h
+++ b/bin/sqfs2tar/sqfs2tar.h
@@ -37,7 +37,7 @@ void process_args(int argc, char **argv);
extern sqfs_xattr_reader_t *xr;
extern sqfs_data_reader_t *data;
extern sqfs_super_t super;
-extern FILE *out_file;
+extern ostream_t *out_file;
char *assemble_tar_path(char *name, bool is_dir);
diff --git a/bin/sqfs2tar/write_tree.c b/bin/sqfs2tar/write_tree.c
index 28e1cf0..e460481 100644
--- a/bin/sqfs2tar/write_tree.c
+++ b/bin/sqfs2tar/write_tree.c
@@ -105,7 +105,7 @@ static int write_tree_dfs(const sqfs_tree_node_t *n)
if (S_ISREG(sb.st_mode)) {
if (sqfs_data_reader_dump(name, data, n->inode, out_file,
- super.block_size, false)) {
+ super.block_size)) {
free(name);
return -1;
}