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);
}
}