From ec171c5f00cf6577e421e28ece288221e4bae62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ni=C3=B1o=20D=C3=ADaz?= Date: Sat, 29 Jul 2017 13:11:26 +0100 Subject: [PATCH] Make object file magic string a common define MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Antonio Niño Díaz --- include/common.h | 6 ++++++ src/asm/output.c | 5 ++++- src/link/object.c | 28 ++++++++++++++++------------ 3 files changed, 26 insertions(+), 13 deletions(-) create mode 100644 include/common.h diff --git a/include/common.h b/include/common.h new file mode 100644 index 00000000..8c4bd395 --- /dev/null +++ b/include/common.h @@ -0,0 +1,6 @@ +#ifndef RGBDS_COMMON_H +#define RGBDS_COMMON_H + +#define RGBDS_OBJECT_VERSION_STRING "RGB5" + +#endif /* RGBDS_COMMON_H */ diff --git a/src/asm/output.c b/src/asm/output.c index 34c6766e..ff0a1a30 100644 --- 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 @@ out_WriteObject(void) 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); diff --git a/src/link/object.c b/src/link/object.c index 770f6604..5b2fd8cf 100644 --- a/src/link/object.c +++ b/src/link/object.c @@ -3,11 +3,13 @@ * */ +#include #include #include #include #include +#include "common.h" #include "extern/err.h" #include "link/assign.h" #include "link/mylink.h" @@ -332,20 +334,22 @@ obj_ReadRGB(FILE * pObjfile, char *tzObjectfile) 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); } }