From 6b3e6d299d5298a5936dbba57f67cdfc4a406789 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Thu, 16 Apr 2020 05:13:50 +0200 Subject: tar2sqfs & gensquashfs: Delete the output file on failure This commit changes the tar2sqfs & gensquashfs code to pass the exit status on to sqfs_writer_cleanup in libcommon. The function sqfs writer code in libcommon is changed to retain the output file name and delete it if the status passed to the cleanup function is anything other than EXIT_SUCCESS. Signed-off-by: David Oberhollenzer --- lib/common/writer.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/common/writer.c b/lib/common/writer.c index 84a98a5..a446c41 100644 --- a/lib/common/writer.c +++ b/lib/common/writer.c @@ -70,6 +70,8 @@ int sqfs_writer_init(sqfs_writer_t *sqfs, const sqfs_writer_cfg_t *wrcfg) sqfs_compressor_config_t cfg; int ret, flags; + sqfs->filename = wrcfg->filename; + if (compressor_cfg_init_options(&cfg, wrcfg->comp_id, wrcfg->block_size, wrcfg->comp_extra)) { @@ -296,7 +298,7 @@ int sqfs_writer_finish(sqfs_writer_t *sqfs, const sqfs_writer_cfg_t *cfg) return 0; } -void sqfs_writer_cleanup(sqfs_writer_t *sqfs) +void sqfs_writer_cleanup(sqfs_writer_t *sqfs, int status) { if (sqfs->xwr != NULL) sqfs_destroy(sqfs->xwr); @@ -311,4 +313,17 @@ void sqfs_writer_cleanup(sqfs_writer_t *sqfs) sqfs_destroy(sqfs->cmp); fstree_cleanup(&sqfs->fs); sqfs_destroy(sqfs->outfile); + + if (status != EXIT_SUCCESS) { +#if defined(_WIN32) || defined(__WINDOWS__) + WCHAR *path = path_to_windows(sqfs->filename); + + if (path != NULL) + DeleteFileW(path); + + free(path); +#else + unlink(sqfs->filename); +#endif + } } -- cgit v1.2.3