Mercurial > hg > dmlib
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; }