changeset 2564:2cf4e995b50c

Improve error checking.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 28 Feb 2022 10:18:38 +0200
parents 8dd81ec802f4
children d56a0e86067a
files tools/objlink.c
diffstat 1 files changed, 25 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/tools/objlink.c	Sun Feb 27 18:15:31 2022 +0200
+++ b/tools/objlink.c	Mon Feb 28 10:18:38 2022 +0200
@@ -822,6 +822,21 @@
 }
 
 
+int dmAddOverlap(DMMemBlockOverlap *olp, const int index)
+{
+    if (olp->noverlaps < SET_MAX_FILENAMES)
+    {
+        olp->overlaps[olp->noverlaps++] = index;
+        return DMERR_OK;
+    }
+    else
+    {
+        return dmError(DMERR_BOUNDS,
+            "Too many memory block overlaps (%d >= %d).\n",
+            olp->noverlaps, SET_MAX_FILENAMES);
+    }
+}
+
 /*
  * The main program
  */
@@ -855,7 +870,8 @@
 
     if ((memory = (Uint8 *) dmMalloc(memModel->size + 32)) == NULL)
     {
-        dmErrorMsg("Could not allocate memory for memory model!\n");
+        res = dmError(DMERR_MALLOC,
+            "Could not allocate memory for memory model!\n");
         goto out;
     }
 
@@ -955,15 +971,18 @@
                 mb1->name, mb2->name, mb1->start,
                 mb1->end, mb2->start, mb2->end);
 
-            olp1->overlaps[olp1->noverlaps++] = bk2;
-            olp2->overlaps[olp2->noverlaps++] = bk1;
+            if ((res = dmAddOverlap(olp1, bk2)) != DMERR_OK ||
+                (res = dmAddOverlap(olp2, bk1)) != DMERR_OK)
+                goto out;
+
             hasOverlaps = TRUE;
         }
     }
 
     if (!optAllowOverlap && hasOverlaps)
     {
-        dmErrorMsg("Error occured, overlaps not allowed.\n");
+        res = dmError(DMERR_BOUNDS,
+            "Error occured, overlaps not allowed.\n");
         goto out;
     }
 
@@ -987,7 +1006,8 @@
 
     if (startAddr >= memModel->size || endAddr < startAddr)
     {
-        dmErrorMsg("Invalid saveblock addresses (start=$%.4x, end=$%.4x)!\n",
+        res = dmError(DMERR_BOUNDS,
+            "Invalid saveblock addresses (start=$%.4x, end=$%.4x)!\n",
             startAddr, endAddr);
         goto out;
     }