Fix some issues with C tools, and build them with -std=c17

This commit is contained in:
Rangi
2026-06-12 11:57:21 -04:00
parent fb7b0d7056
commit 839f0c0c67
5 changed files with 19 additions and 4 deletions

View File

@@ -1,7 +1,7 @@
.PHONY: all clean
CC := gcc
CFLAGS := -O3 -std=c11 -Wall -Wextra -pedantic
CFLAGS := -O3 -std=c17 -Wall -Wextra -pedantic
tools := \
gbcpal \

View File

@@ -67,6 +67,9 @@ void parse_args(int argc, char *argv[]) {
break;
case 'd':
options.depth = strtoul(optarg, NULL, 0);
if (options.depth != 1 && options.depth != 2) {
error_exit("bit depth must be 1 or 2, not %d\n", options.depth);
}
break;
case 'p':
options.png_file = optarg;

View File

@@ -228,7 +228,8 @@ void interpret_command(char *command, const struct Symbol *current_hook, const s
}
// Get the arguments
char *argv[argc]; // VLA
char *argv[argc + 1]; // VLA (cannot be zero-length)
argv[argc] = NULL;
char *arg = command;
for (int i = 0; i < argc; i++) {
while (*arg && !isspace((unsigned)*arg)) {
@@ -515,7 +516,7 @@ int main(int argc, char *argv[]) {
FILE *new_rom = xfopen(argv[1], 'r');
FILE *orig_rom = xfopen(argv[2], 'r');
if (new_rom == stdin || orig_rom == stdin) {
error_exit("Error: Cannot read ROM file from stdin (not rewindable)");
error_exit("Error: Cannot read ROM file from stdin (not rewindable)\n");
}
struct Buffer *patches = process_template(argv[3], argv[4], new_rom, orig_rom, symbols, ignore_addr, ignore_size);

View File

@@ -118,10 +118,12 @@ void make_frames(const uint8_t *tilemap, long tilemap_size, int width, struct Fr
bitmasks->num_bitmasks++;
} else {
free(bitmask->data);
free(bitmask);
}
frames->frames[i] = *frame;
this_frame += num_tiles_per_frame;
free(frame);
free(bitmask);
}
}
@@ -191,5 +193,13 @@ int main(int argc, char *argv[]) {
}
free(tilemap);
for (int i = 0; i < frames.num_frames; i++) {
free(frames.frames[i].data);
}
free(frames.frames);
for (int i = 0; i < bitmasks.num_bitmasks; i++) {
free(bitmasks.bitmasks[i].data);
}
free(bitmasks.bitmasks);
return 0;
}

View File

@@ -199,5 +199,6 @@ int main(int argc, char *argv[]) {
calculate_checksums(file, european);
}
write_u8(filename, file, filesize);
free(file);
return 0;
}