diff --git a/tools/scan_includes.c b/tools/scan_includes.c index b6fcca03a..2babdcfb5 100644 --- a/tools/scan_includes.c +++ b/tools/scan_includes.c @@ -19,16 +19,8 @@ struct Options { struct Options Options = {0}; - void scan_file(char* filename) { - FILE* f; - long size; - char* orig; - char* buffer; - char* include; - int length; - - f = fopen(filename, "r"); + FILE *f = fopen(filename, "rb"); if (!f) { if (Options.strict) { fprintf(stderr, "Could not open file: '%s'\n", filename); @@ -39,65 +31,70 @@ void scan_file(char* filename) { } fseek(f, 0, SEEK_END); - size = ftell(f); + long size = ftell(f); rewind(f); - buffer = malloc(size + 1); - orig = buffer; - fread(buffer, 1, size, f); + char *buffer = malloc(size + 1); + char *orig = buffer; + size = fread(buffer, 1, size, f); buffer[size] = '\0'; fclose(f); for (; buffer && (buffer - orig < size); buffer++) { - if (buffer[0] == ';') { - buffer = strchr(buffer, '\n'); - if (!buffer) { - fprintf(stderr, "%s: no newline at end of file\n", filename); - break; - } - continue; - } bool is_include = false; bool is_incbin = false; - if ((strncmp(buffer, "INCBIN", 6) == 0) || (strncmp(buffer, "incbin", 6) == 0)) { - is_incbin = true; - } else if ((strncmp(buffer, "INCLUDE", 7) == 0) || (strncmp(buffer, "include", 7) == 0)) { - is_include = true; - } - if (is_incbin || is_include) { - buffer = strchr(buffer, '"') + 1; - if (!buffer) { + switch (*buffer) { + case ';': + buffer = strchr(buffer, '\n'); + if (!buffer) { + fprintf(stderr, "%s: no newline at end of file\n", filename); + } break; - } - length = strcspn(buffer, "\""); - include = malloc(length + 1); - strncpy(include, buffer, length); - include[length] = '\0'; - printf("%s ", include); - if (is_include) { - scan_file(include); - } - free(include); + + case 'i': + case 'I': + if ((strncmp(buffer, "INCBIN", 6) == 0) || (strncmp(buffer, "incbin", 6) == 0)) { + is_incbin = true; + } else if ((strncmp(buffer, "INCLUDE", 7) == 0) || (strncmp(buffer, "include", 7) == 0)) { + is_include = true; + } + if (is_incbin || is_include) { + buffer = strchr(buffer, '"'); + if (!buffer++) { + break; + } + int length = strcspn(buffer, "\""); + char *include = malloc(length + 1); + strncpy(include, buffer, length); + include[length] = '\0'; + printf("%s ", include); + if (is_include) { + scan_file(include); + } + free(include); + buffer = strchr(buffer, '"'); + } + break; + } + if (!buffer) { + break; + } + } free(orig); } -void get_args(int argc, char *argv[]) { - while (1) { - struct option long_options[] = { - {"strict", no_argument, 0, 's'}, - {"help", no_argument, 0, 'h'}, - {0} - }; - int i = 0; - int opt = getopt_long(argc, argv, "sh", long_options, &i); - - if (opt == -1) { - break; - } - +int main(int argc, char* argv[]) { + int i = 0; + struct option long_options[] = { + {"strict", no_argument, 0, 's'}, + {"help", no_argument, 0, 'h'}, + {0} + }; + int opt = -1; + while ((opt = getopt_long(argc, argv, "sh", long_options, &i)) != -1) { switch (opt) { case 's': Options.strict = true; @@ -111,10 +108,6 @@ void get_args(int argc, char *argv[]) { break; } } -} - -int main(int argc, char* argv[]) { - get_args(argc, argv); argc -= optind; argv += optind; if (Options.help) {