}
int main(int argc, const char **argv) {
- simple_archiver_print_usage();
-
- __attribute__((cleanup(simple_archiver_free_parsed)))
- SDArchiverParsed parsed = simple_archiver_create_parsed();
+ __attribute__((
+ cleanup(simple_archiver_free_parsed))) SDArchiverParsed parsed =
+ simple_archiver_create_parsed();
simple_archiver_parse_args(argc, argv, &parsed);
+ if ((parsed.flags & 0x2) == 0) {
+ FILE *file = fopen(parsed.filename, "r");
+ if (file != NULL) {
+ fclose(file);
+ fprintf(
+ stderr,
+ "ERROR: Archive file exists but --overwrite-create not specified!\n");
+ simple_archiver_print_usage();
+ return 1;
+ }
+ }
+
__attribute__((cleanup(simple_archiver_list_free)))
SDArchiverLinkedList *filenames =
simple_archiver_parsed_to_filenames(&parsed);
puts("-f <filename> : filename to work on");
puts("--compressor <full_compress_cmd> : requires --decompressor");
puts("--decompressor <full_decompress_cmd> : requires --compressor");
+ puts("--overwrite-create : allows overwriting an archive file");
puts("-- : specifies remaining arguments are files to archive/extract");
puts("If creating archive file, remaining args specify files to archive.");
puts("If extracting archive file, remaining args specify files to extract.");
strncpy(out->decompressor, argv[1], size);
--argc;
++argv;
+ } else if (strcmp(argv[0], "--overwrite-create") == 0) {
+ out->flags |= 0x2;
} else if (argv[0][0] == '-' && argv[0][1] == '-' && argv[0][2] == 0) {
is_remaining_args = 1;
} else if (argv[0][0] != '-') {
typedef struct SDArchiverParsed {
/// Each bit is a flag.
- /// 0b0 - is creating.
- /// 0b1 - is extracting.
+ /// 0b0 - is creating.
+ /// 0b1 - is extracting.
+ /// 0b0x - Do NOT allow create archive overwrite.
+ /// 0b1x - Allow create archive overwrite.
unsigned int flags;
/// Null-terminated string.
char *filename;