]> git.sur5r.net Git - cc65/commitdiff
Don't write INITAD if the memory area is empty.
authorDaniel Serpell <daniel.serpell@gmail.com>
Mon, 18 Feb 2019 12:28:00 +0000 (09:28 -0300)
committerDaniel Serpell <daniel.serpell@gmail.com>
Thu, 21 Feb 2019 22:00:17 +0000 (19:00 -0300)
src/ld65/xex.c

index e7674949a01910786f8424c959bff199b7ab50a0..c57fa0a8cf2347af7914251e05a51fcf0c255f32 100644 (file)
@@ -233,11 +233,14 @@ static void XexFakeSegment (XexDesc *D, unsigned long Addr)
 
 
 
-static void XexWriteMem (XexDesc* D, MemoryArea* M)
+static unsigned long XexWriteMem (XexDesc* D, MemoryArea* M)
 /* Write the segments of one memory area to a file */
 {
     unsigned I;
 
+    /* Store initial position to get total file size */
+    unsigned long StartPos = ftell (D->F);
+
     /* Always write a segment header for each memory area */
     D->HeadPos = 0;
 
@@ -355,6 +358,8 @@ static void XexWriteMem (XexDesc* D, MemoryArea* M)
     if (D->HeadSize == 0 && D->HeadPos) {
         fseek (D->F, D->HeadPos, SEEK_SET);
     }
+
+    return ftell (D->F) - StartPos;
 }
 
 
@@ -406,8 +411,7 @@ void XexWriteTarget (XexDesc* D, struct File* F)
         /* See if we have an init address for this area */
         XexInitAd* I = XexSearchInitMem (D, M);
         Print (stdout, 1, "  ATARI EXE Dumping `%s'\n", GetString (M->Name));
-        XexWriteMem (D, M);
-        if (I) {
+        if (XexWriteMem (D, M) && I) {
             Write16 (D->F, 0x2E2);
             Write16 (D->F, 0x2E3);
             Write16 (D->F, GetExportVal (I->InitAd->Exp));