From e8a16c6f532864886f96684c57f4f211d0126607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ni=C3=B1o=20D=C3=ADaz?= Date: Sun, 22 Apr 2018 20:36:36 +0100 Subject: [PATCH] Don't generate output file if overlay isn't found MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, the output file was opened before trying to open the overlay. Because of this, rgblink generated an empty output file if the overlay couldn't be opened. Now the overlay is opened (and checked) before the output file, so the output file is only generated if the overlay is found. Signed-off-by: Antonio Niño Díaz --- src/link/output.c | 63 ++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/src/link/output.c b/src/link/output.c index 67409375..9b52d68d 100644 --- a/src/link/output.c +++ b/src/link/output.c @@ -110,46 +110,53 @@ void Output(void) FILE *f_overlay = NULL; /* - * Apply overlay + * Load overlay + */ + + if (tzOverlayname) { + f_overlay = fopen(tzOverlayname, "rb"); + + if (!f_overlay) { + errx(1, "Failed to open overlay file %s\n", + tzOverlayname); + } + + fseek(f_overlay, 0, SEEK_END); + + if (ftell(f_overlay) % 0x4000 != 0) + errx(1, "Overlay file must be aligned to 0x4000 bytes."); + + MaxOverlayBank = (ftell(f_overlay) / 0x4000) - 1; + + if (MaxOverlayBank < 1) + errx(1, "Overlay file must be at least 0x8000 bytes."); + + if (MaxOverlayBank > MaxBankUsed) + MaxBankUsed = MaxOverlayBank; + } + + /* + * Write ROM. */ f = fopen(tzOutname, "wb"); - if (f != NULL) { - if (tzOverlayname) { - f_overlay = fopen(tzOverlayname, "rb"); - - if (!f_overlay) { - errx(1, "Failed to open overlay file %s\n", - tzOverlayname); - } - - fseek(f_overlay, 0, SEEK_END); - - if (ftell(f_overlay) % 0x4000 != 0) - errx(1, "Overlay file must be aligned to 0x4000 bytes."); - - MaxOverlayBank = (ftell(f_overlay) / 0x4000) - 1; - - if (MaxOverlayBank < 1) - errx(1, "Overlay file must be at least 0x8000 bytes."); - - if (MaxOverlayBank > MaxBankUsed) - MaxBankUsed = MaxOverlayBank; - } - writehome(f, f_overlay); for (i = 1; i <= MaxBankUsed; i += 1) writebank(f, f_overlay, i); fclose(f); - - if (tzOverlayname) - fclose(f_overlay); } /* - * Add regular sections + * Close overlay + */ + + if (tzOverlayname) + fclose(f_overlay); + + /* + * Add regular sections to map and sym files. */ for (i = BANK_INDEX_WRAM0; i < BANK_INDEX_MAX; i++) {