shithub: pokecrystal

Download patch

ref: 885af5e5438f9d09f822d67c587f7a80b8da15f9
parent: 80888726b9e5d8d62a8b1e76615bb11a1c9ca191
author: yenatch <yenatch@gmail.com>
date: Sun Aug 20 08:32:15 EDT 2017

Refactor scan_includes

--- a/tools/scan_includes.c
+++ b/tools/scan_includes.c
@@ -19,16 +19,8 @@
 
 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 @@
 	}
 
 	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 @@
 			break;
 		}
 	}
-}
-
-int main(int argc, char* argv[]) {
-	get_args(argc, argv);
 	argc -= optind;
 	argv += optind;
 	if (Options.help) {