# HG changeset patch # User Matti Hamalainen # Date 1646036318 -7200 # Node ID 2cf4e995b50c83359435bf3ec2f60098b4345d3d # Parent 8dd81ec802f4076c8f73bf46b7c9b87be8153b47 Improve error checking. diff -r 8dd81ec802f4 -r 2cf4e995b50c tools/objlink.c --- 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; }