# HG changeset patch # User Matti Hamalainen # Date 1645972634 -7200 # Node ID aabfa00eafd901994f75ee40e29074e797a46124 # Parent 5c714feeb3a7ef589f0bda2c049d228f9c6b03af Improve error handling. diff -r 5c714feeb3a7 -r aabfa00eafd9 tools/objlink.c --- 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; }