changeset 2554:aabfa00eafd9

Improve error handling.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 27 Feb 2022 16:37:14 +0200
parents 5c714feeb3a7
children 6249aa494e83
files tools/objlink.c
diffstat 1 files changed, 29 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/tools/objlink.c	Sun Feb 27 16:36:20 2022 +0200
+++ b/tools/objlink.c	Sun Feb 27 16:37:14 2022 +0200
@@ -219,13 +219,13 @@
 
 /* Memory block handling
  */
-BOOL dmReserveMemBlock(int startAddr, int endAddr, const char *blockName, int blockType)
+int dmReserveMemBlock(int startAddr, int endAddr, const char *blockName, int blockType)
 {
     if (startAddr > endAddr)
     {
-        dmErrorMsg("ERROR! Block '%s' has startAddr=$%.4x > endAddr=$%.4x!\n",
+        return dmError(DMERR_INVALID_ARGS,
+            "ERROR! Block '%s' has startAddr=$%.4x > endAddr=$%.4x!\n",
             blockName, startAddr, endAddr);
-        return FALSE;
     }
 
     if (nmemBlocks < SET_MAX_FILENAMES)
@@ -235,13 +235,13 @@
         memBlocks[nmemBlocks].name  = dm_strdup(blockName);
         memBlocks[nmemBlocks].type  = blockType;
         nmemBlocks++;
-        return TRUE;
+        return DMERR_OK;
     }
     else
     {
-        dmErrorMsg("Maximum number of memBlock definitions (%d) exceeded!\n",
+        return dmError(DMERR_BOUNDS,
+            "Maximum number of memBlock definitions (%d) exceeded!\n",
             SET_MAX_FILENAMES);
-        return FALSE;
     }
 }
 
@@ -413,7 +413,7 @@
                 dmMsg(1, "Reserve $%.4x - $%.4x ($%x, %d bytes) as '%s'\n",
                     sectStart, sectEnd, sectLen, sectLen, sectName);
 
-                if (!dmReserveMemBlock(sectStart, sectEnd, sectName, MTYPE_RES))
+                if (dmReserveMemBlock(sectStart, sectEnd, sectName, MTYPE_RES) != DMERR_OK)
                     return FALSE;
             }
             break;
@@ -608,8 +608,8 @@
     dmPrint(1, " .. OK\n");
 
     // Add to list of blocks
-    if (!dmReserveMemBlock(loadAddr, endAddr, filename, MTYPE_RES))
-        res = DMERR_MALLOC;
+    if ((res = dmReserveMemBlock(loadAddr, endAddr, filename, MTYPE_RES)) != DMERR_OK)
+        goto out;
 
 out:
     if (fh != NULL)
@@ -665,8 +665,8 @@
     dmPrint(1, " .. OK\n");
 
     // Add info to list
-    if (!dmReserveMemBlock(destAddr, endAddr, filename, MTYPE_RES))
-        res = DMERR_MALLOC;
+    if ((res = dmReserveMemBlock(destAddr, endAddr, filename, MTYPE_RES)) != DMERR_OK)
+        goto out;
 
 out:
     if (fh != NULL)
@@ -684,12 +684,11 @@
     blockSize = (blockEnd - blockStart + 1);
 
     // Create label name from filename
-    tmpStr = dm_strdup(blockName);
-    if (tmpStr == NULL)
+    if ((tmpStr = dm_strdup(blockName)) == NULL)
     {
-        dmErrorMsg("Could not allocate memory for string '%s'!\n",
+        return dmError(DMERR_MALLOC,
+            "Could not allocate memory for string '%s'!\n",
             blockName);
-        return -1;
     }
 
     if ((t = strrchr(tmpStr, '/')))
@@ -729,7 +728,7 @@
     }
 
     dmFree(tmpStr);
-    return 0;
+    return DMERR_OK;
 }
 
 
@@ -819,7 +818,7 @@
 {
     FILE *outFile = NULL;
     BOOL hasOverlaps;
-    int startAddr, endAddr, dataSize, totalSize;
+    int res = DMERR_OK, startAddr, endAddr, dataSize, totalSize;
 
     dmInitProg("objlink", "Simple file-linker", "0.82", NULL, NULL);
 
@@ -898,11 +897,11 @@
     dmMsg(1, "Applying memory model restrictions...\n");
     for (int i = 0; i < memModel->nmemBlocks; i++)
     {
-        if (!dmReserveMemBlock(
+        if ((res = dmReserveMemBlock(
             memModel->memBlocks[i].start,
             memModel->memBlocks[i].end,
             memModel->memBlocks[i].name,
-            memModel->memBlocks[i].type))
+            memModel->memBlocks[i].type)) != DMERR_OK)
             goto out;
     }
 
@@ -966,9 +965,9 @@
         dmMsg(1, "Writing linkfile to '%s'\n", optLinkFileName);
         if ((outFile = fopen(optLinkFileName, "wb")) == NULL)
         {
-            int err = dmGetErrno();
-            dmErrorMsg("Error creating file '%s' #%d: %s.\n",
-                optLinkFileName, err, dmErrorStr(err));
+            res = dmGetErrno();
+            dmErrorMsg("Error creating file '%s': %s.\n",
+                optLinkFileName, dmErrorStr(res));
             goto out;
         }
 
@@ -1017,9 +1016,9 @@
     }
     else if ((outFile = fopen(optDestName, "wb")) == NULL)
     {
-        int err = dmGetErrno();
-        dmErrorMsg("Error creating output file '%s' #%d: %s.\n",
-            optDestName, err, dmErrorStr(err));
+        res = dmGetErrno();
+        dmErrorMsg("Error creating output file '%s': %s.\n",
+            optDestName, dmErrorStr(res));
         goto out;
     }
     else
@@ -1045,9 +1044,10 @@
     // Save the data
     if (fwrite(&memory[startAddr], dataSize, 1, outFile) < 1)
     {
-        int err = dmGetErrno();
-        dmErrorMsg("Error writing to file #%d: %s.\n",
-            err, dmErrorStr(err));
+        res = dmGetErrno();
+        dmErrorMsg(
+            "Error writing to file: %s.\n",
+            dmErrorStr(res));
         goto out;
     }
 
@@ -1059,5 +1059,5 @@
     if (outFile != NULL && outFile != stdout)
         fclose(outFile);
 
-    return 0;
+    return res;
 }