shithub: rgbds

Download patch

ref: ec171c5f00cf6577e421e28ece288221e4bae62c
parent: 840ddcecd2965a2b7301944e5bf47d01a1fba353
author: Antonio Niño Díaz <[email protected]>
date: Sat Jul 29 09:11:26 EDT 2017

Make object file magic string a common define

Signed-off-by: Antonio Niño Díaz <[email protected]>

--- /dev/null
+++ b/include/common.h
@@ -1,0 +1,6 @@
+#ifndef RGBDS_COMMON_H
+#define RGBDS_COMMON_H
+
+#define RGBDS_OBJECT_VERSION_STRING "RGB5"
+
+#endif /* RGBDS_COMMON_H */
--- a/src/asm/output.c
+++ b/src/asm/output.c
@@ -15,6 +15,7 @@
 #include "asm/main.h"
 #include "asm/rpn.h"
 #include "asm/fstack.h"
+#include "common.h"
 #include "extern/err.h"
 
 void out_SetCurrentSection(struct Section * pSect);
@@ -504,7 +505,9 @@
 		struct PatchSymbol *pSym;
 		struct Section *pSect;
 
-		fwrite("RGB5", 1, 4, f);
+		fwrite(RGBDS_OBJECT_VERSION_STRING, 1,
+		       strlen(RGBDS_OBJECT_VERSION_STRING), f);
+
 		fputlong(countsymbols(), f);
 		fputlong(countsections(), f);
 
--- a/src/link/object.c
+++ b/src/link/object.c
@@ -3,11 +3,13 @@
  *
  */
 
+#include <ctype.h>
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include "common.h"
 #include "extern/err.h"
 #include "link/assign.h"
 #include "link/mylink.h"
@@ -332,20 +334,22 @@
 void
 obj_ReadOpenFile(FILE * pObjfile, char *tzObjectfile)
 {
-	char tzHeader[8];
+	char tzHeader[strlen(RGBDS_OBJECT_VERSION_STRING) + 1];
 
-	fread(tzHeader, sizeof(char), 4, pObjfile);
-	tzHeader[4] = 0;
-	if (strncmp(tzHeader, "RGB", 3) == 0) {
-		switch (tzHeader[3]) {
-		case '5':
-			obj_ReadRGB(pObjfile, tzObjectfile);
-			break;
-		default:
-			errx(1, "'%s' uses an unsupported object file version (%s). Please reassemble it.", tzObjectfile, tzHeader);
-		}
+	fread(tzHeader, sizeof(char), strlen(RGBDS_OBJECT_VERSION_STRING),
+		pObjfile);
+
+	tzHeader[strlen(RGBDS_OBJECT_VERSION_STRING)] = 0;
+
+	if (strncmp(tzHeader, RGBDS_OBJECT_VERSION_STRING,
+			strlen(RGBDS_OBJECT_VERSION_STRING)) == 0) {
+		obj_ReadRGB(pObjfile, tzObjectfile);
 	} else {
-		errx(1, "'%s' is not a valid object", tzObjectfile);
+		for (int i = 0; i < strlen(RGBDS_OBJECT_VERSION_STRING); i++)
+			if (!isprint(tzHeader[i]))
+				tzHeader[i] = '?';
+		errx(1, "%s: Invalid file or object file version [%s]",
+			tzObjectfile, tzHeader);
 	}
 }