summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/common.h3
-rw-r--r--lib/common/writer.c17
-rw-r--r--mkfs/mkfs.c2
-rw-r--r--tar/tar2sqfs.c2
4 files changed, 20 insertions, 4 deletions
diff --git a/include/common.h b/include/common.h
index 2ecea42..0cc45c8 100644
--- a/include/common.h
+++ b/include/common.h
@@ -35,6 +35,7 @@
#include <stddef.h>
typedef struct {
+ const char *filename;
sqfs_block_writer_t *blkwr;
sqfs_frag_table_t *fragtbl;
sqfs_block_processor_t *data;
@@ -125,7 +126,7 @@ int sqfs_writer_init(sqfs_writer_t *sqfs, const sqfs_writer_cfg_t *wrcfg);
int sqfs_writer_finish(sqfs_writer_t *sqfs, const sqfs_writer_cfg_t *cfg);
-void sqfs_writer_cleanup(sqfs_writer_t *sqfs);
+void sqfs_writer_cleanup(sqfs_writer_t *sqfs, int status);
void sqfs_perror(const char *file, const char *action, int error_code);
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
+ }
}
diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c
index 0ef65ca..9ffbb94 100644
--- a/mkfs/mkfs.c
+++ b/mkfs/mkfs.c
@@ -211,6 +211,6 @@ int main(int argc, char **argv)
status = EXIT_SUCCESS;
out:
- sqfs_writer_cleanup(&sqfs);
+ sqfs_writer_cleanup(&sqfs, status);
return status;
}
diff --git a/tar/tar2sqfs.c b/tar/tar2sqfs.c
index 6186930..1ebe642 100644
--- a/tar/tar2sqfs.c
+++ b/tar/tar2sqfs.c
@@ -539,6 +539,6 @@ int main(int argc, char **argv)
status = EXIT_SUCCESS;
out:
- sqfs_writer_cleanup(&sqfs);
+ sqfs_writer_cleanup(&sqfs, status);
return status;
}