From 7046dfb1e5329be5153b56e078d88f40e9adfd7f Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Thu, 18 Jul 2024 22:08:48 +0900 Subject: [PATCH] More robust cleanup of temporary file --- src/archiver.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/archiver.c b/src/archiver.c index c8cd0bd..128f3eb 100644 --- a/src/archiver.c +++ b/src/archiver.c @@ -72,6 +72,17 @@ int write_list_datas_fn(void *data, void *ud) { return 0; } +void cleanup_temp_filename_delete(char **tmpfilename) { +#if SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_COSMOPOLITAN || \ + SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_MAC || \ + SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_LINUX + if (tmpfilename && *tmpfilename) { + unlink(*tmpfilename); + *tmpfilename = NULL; + } +#endif +} + int write_files_fn(void *data, void *ud) { const SDArchiverFileInfo *file_info = data; SDArchiverState *state = ud; @@ -315,6 +326,8 @@ int write_files_fn(void *data, void *ud) { // Get compressed file length. // Compressed file should be at "temp_filename". tmp_fd = fopen(temp_filename, "rb"); + __attribute__((cleanup(cleanup_temp_filename_delete))) char + *temp_filename_cleanup_reference = temp_filename; long end; if (fseek(tmp_fd, 0, SEEK_END) != 0) { // Error seeking. @@ -362,7 +375,6 @@ int write_files_fn(void *data, void *ud) { // Cleanup. free_FILE_helper(&tmp_fd); - unlink(temp_filename); #endif } else { uint16_t u16;