changeset 1654:92656ad7f706

Improve IFF reader error handling.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 30 May 2018 12:41:31 +0300
parents 4b528da326da
children a05e3fcc60ec
files tools/libgfx.c
diffstat 1 files changed, 9 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/tools/libgfx.c	Wed May 30 11:16:39 2018 +0300
+++ b/tools/libgfx.c	Wed May 30 12:41:31 2018 +0300
@@ -1498,17 +1498,16 @@
 }
 
 
-static BOOL dmReadIFFChunkHdr(DMResource *fp, DMIFFChunk *chunk)
+static int dmReadIFFChunkHdr(DMResource *fp, DMIFFChunk *chunk)
 {
     if (!dmf_read_be32(fp, &chunk->id) ||
         !dmf_read_be32(fp, &chunk->size))
     {
-        dmError(DMERR_FREAD,
+        return dmError(DMERR_FREAD,
             "ILBM: Could not read IFF chunk header.\n");
-        return FALSE;
     }
     else
-        return TRUE;
+        return DMERR_OK;
 }
 
 static char * dmGetIFFChunkID(DMIFFChunk *chunk)
@@ -1736,9 +1735,10 @@
     dmMemset(&iff, 0, sizeof(iff));
 
     // Read IFF FORM header
-    if (!dmReadIFFChunkHdr(fp, &chunk) ||
-        chunk.id != IFF_ID_FORM ||
-        chunk.size < 32)
+    if ((res = dmReadIFFChunkHdr(fp, &chunk)) != DMERR_OK)
+        return res;
+
+    if (chunk.id != IFF_ID_FORM || chunk.size < 32)
     {
         return dmError(DMERR_NOT_SUPPORTED,
             "ILBM: Not a IFF file (%08X vs %08X / %d).\n",
@@ -1757,11 +1757,8 @@
 
     while (!parsed && !dmfeof(fp))
     {
-        if (!dmReadIFFChunkHdr(fp, &chunk))
-        {
-            return dmError(DMERR_FREAD,
-                "ILBM: Error reading IFF ILBM data.\n");
-        }
+        if ((res = dmReadIFFChunkHdr(fp, &chunk)) != DMERR_OK)
+            return res;
 
         switch (chunk.id)
         {