Impl. being able to set dir for temporary files
All checks were successful
Run Unit Tests / build-and-run-unit-tests (push) Successful in 11s

This commit is contained in:
Stephen Seo 2024-07-25 10:42:31 +09:00
parent c55864a51b
commit 0b63dd12ee
2 changed files with 20 additions and 8 deletions

View file

@ -39,7 +39,7 @@
#include "helpers.h"
#define TEMP_FILENAME_CMP "simple_archiver_compressed_%u.tmp"
#define TEMP_FILENAME_CMP "%s%ssimple_archiver_compressed_%u.tmp"
#if SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_COSMOPOLITAN || \
SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_MAC || \
@ -168,15 +168,21 @@ int write_files_fn(void *data, void *ud) {
SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_MAC || \
SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_LINUX
// Use temp file to store compressed data.
char temp_filename[128];
char temp_filename[512];
unsigned int idx = 0;
snprintf(temp_filename, 128, TEMP_FILENAME_CMP, idx);
unsigned int temp_dir_end = strlen(state->parsed->temp_dir);
snprintf(temp_filename, 512, TEMP_FILENAME_CMP, state->parsed->temp_dir,
state->parsed->temp_dir[temp_dir_end - 1] == '/' ? "" : "/",
idx);
do {
FILE *test_fd = fopen(temp_filename, "rb");
if (test_fd) {
// File exists.
fclose(test_fd);
snprintf(temp_filename, 128, TEMP_FILENAME_CMP, ++idx);
snprintf(temp_filename, 512, TEMP_FILENAME_CMP,
state->parsed->temp_dir,
state->parsed->temp_dir[temp_dir_end - 1] == '/' ? "" : "/",
++idx);
} else if (idx > 0xFFFF) {
// Sanity check.
return 1;
@ -192,14 +198,14 @@ int write_files_fn(void *data, void *ud) {
}
__attribute__((cleanup(free_FILE_helper))) FILE *tmp_fd =
fopen(temp_filename, "wb");
if (!tmp_fd) {
fprintf(stderr, "ERROR: Unable to create temp file for compressing!\n");
return 1;
}
__attribute__((cleanup(cleanup_temp_filename_delete))) void **ptrs_array =
malloc(sizeof(void *) * 2);
ptrs_array[0] = temp_filename;
ptrs_array[1] = &tmp_fd;
if (!tmp_fd) {
// Unable to create temp file.
return 1;
}
// Handle SIGPIPE.
signal(SIGPIPE, handle_sig_pipe);

View file

@ -174,6 +174,7 @@ SDArchiverParsed simple_archiver_create_parsed(void) {
parsed.compressor = NULL;
parsed.decompressor = NULL;
parsed.working_files = NULL;
parsed.temp_dir = NULL;
return parsed;
}
@ -202,6 +203,7 @@ int simple_archiver_parse_args(int argc, const char **argv,
while (argc > 0) {
if (!is_remaining_args) {
if (strcmp(argv[0], "-h") == 0 || strcmp(argv[0], "--help") == 0) {
simple_archiver_free_parsed(out);
simple_archiver_print_usage();
exit(0);
} else if (strcmp(argv[0], "-c") == 0) {
@ -319,6 +321,10 @@ int simple_archiver_parse_args(int argc, const char **argv,
++argv;
}
if (!out->temp_dir) {
out->temp_dir = "./";
}
return 0;
}