changeset 1046:7e54b2d08ce7

Add special debug error message function/macro that can be disabled and compiled out.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 01 Mar 2015 18:03:08 +0200
parents 1f37239172ad
children b6c5e0c62588
files src/dmimage.c src/dmlib.h src/dmpack.c src/dmres.c src/dmzlib.c
diffstat 5 files changed, 49 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/dmimage.c	Sun Mar 01 17:47:50 2015 +0200
+++ b/src/dmimage.c	Sun Mar 01 18:03:08 2015 +0200
@@ -7,8 +7,9 @@
 #include "dmimage.h"
 #include "dmzlib.h"
 
-
+#ifndef DM_DEBUG
 #define STBI_NO_FAILURE_STRINGS 1
+#endif
 #define STBI_FAILURE_USERMSG 1
 
 #define STB_IMAGE_IMPLEMENTATION 1
@@ -172,7 +173,7 @@
 
     if (result == NULL)
     {
-        dmError(DMERR_DATA_ERROR,
+        dmErrorDBG(DMERR_DATA_ERROR,
             "Format conversion failed for image resource %p '%s' [%d, %d, %d].\n",
             file, file->filename, width, height, comp);
     }
--- a/src/dmlib.h	Sun Mar 01 17:47:50 2015 +0200
+++ b/src/dmlib.h	Sun Mar 01 18:03:08 2015 +0200
@@ -21,6 +21,7 @@
 #  define assert(NEXPR) // stub
 #endif
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -331,6 +332,12 @@
 int        dmGetErrno();
 const char *dmErrorStr(const int error);
 
+#ifdef DM_DEBUG
+#    define dmErrorDBG dmError
+#else
+#    define dmErrorDBG(ecode, fmt, ...) (ecode) // Dummy
+#endif
+
 void *     dmMalloc(size_t);
 void *     dmMalloc0(size_t);
 void *     dmRealloc(void *, size_t);
--- a/src/dmpack.c	Sun Mar 01 17:47:50 2015 +0200
+++ b/src/dmpack.c	Sun Mar 01 18:03:08 2015 +0200
@@ -78,27 +78,32 @@
     // Allocate packfile-structure
     if ((pack = dmMalloc0(sizeof(DMPackFile))) == NULL)
     {
-        ret = DMERR_MALLOC;
+        ret = dmErrorDBG(DMERR_MALLOC,
+            "Failed to allocate memory for PACK file structure '%s'.\n",
+            filename);
         goto out;
     }
 
     // Open the file
     if ((pack->file = fopen(filename, readOnly ? "rb" : "r+b")) == NULL)
     {
-        ret = DMERR_FOPEN;
+        ret = dmErrorDBG(dmGetErrno(),
+            "Failed to open PACK file '%s'.\n",
+            filename);
         goto out;
     }
 
     pack->filename = dm_strdup(filename);
 
     // Read PACK header
-    fseek(pack->file, 0L, SEEK_SET);
+    DM_FSEEK64(pack->file, 0L, SEEK_SET);
     if (!dm_fread_str(pack->file, (Uint8 *) &hdr.ident, sizeof(hdr.ident)) ||
         !dm_fread_le16(pack->file, &hdr.version) ||
         !dm_fread_le32(pack->file, &hdr.dirEntries) ||
         !dm_fread_le64(pack->file, &hdr.dirOffset))
     {
-        ret = DMERR_FREAD;
+        ret = dmErrorDBG(DMERR_FREAD,
+            "Error reading PACK file header data.\n");
         goto out;
     }
 
@@ -117,9 +122,11 @@
 
     // Read directory
     if (hdr.dirOffset < sizeof(hdr) ||
-        fseek(pack->file, hdr.dirOffset, SEEK_SET) != 0)
+        DM_FSEEK64(pack->file, hdr.dirOffset, SEEK_SET) != 0)
     {
-        ret = DMERR_INVALID;
+        ret = dmErrorDBG(DMERR_INVALID,
+            "Error seeking to PACK file '%s' directory offset.\n",
+            filename); 
         goto out;
     }
 
--- a/src/dmres.c	Sun Mar 01 17:47:50 2015 +0200
+++ b/src/dmres.c	Sun Mar 01 18:03:08 2015 +0200
@@ -354,7 +354,7 @@
 
     if (inflateInit(&zstr) != Z_OK)
     {
-        res = dmError(DMERR_INIT_FAIL,
+        res = dmErrorDBG(DMERR_INIT_FAIL,
             "Could not initialize zlib stream decompression.\n");
         goto out;
     }
@@ -445,7 +445,7 @@
     // Search PACK nodelist for file
     if ((node = dmPackFind(handle->lib->packFile->entries, handle->filename)) == NULL)
     {
-        ret = dmError(DMERR_NOT_FOUND,
+        ret = dmErrorDBG(DMERR_NOT_FOUND,
             "Entry '%s' not found in PACK file.\n",
             handle->filename);
         goto out;
@@ -454,7 +454,7 @@
     // Seek to entry
     if (DM_FSEEK64(handle->lib->packFile->file, node->offset, SEEK_SET) == -1)
     {
-        ret = dmError(DMERR_FSEEK,
+        ret = dmErrorDBG(DMERR_FSEEK,
             "Could not seek node position in PACK file.\n");
         goto out;
     }
@@ -462,7 +462,7 @@
     // Allocate memory for the node
     if ((handle->rawData = dmMalloc(node->size)) == NULL)
     {
-        ret = dmError(DMERR_MALLOC,
+        ret = dmErrorDBG(DMERR_MALLOC,
             "Failed to allocate node data for '%s' (%d bytes).\n",
             handle->filename, node->size);
         goto out;
@@ -476,7 +476,7 @@
 
         if (handle->rawSize != node->size)
         {
-            ret = dmError(DMERR_COMPRESSION,
+            ret = dmErrorDBG(DMERR_COMPRESSION,
                 "Decompressed data size for '%s' does not match size stored in PACK entry (%d <> %d).\n",
                 handle->filename, handle->rawSize, node->size);
         }
@@ -485,14 +485,14 @@
     {
         if (node->size != node->length)
         {
-            ret = dmError(DMERR_INVALID_DATA,
+            ret = dmErrorDBG(DMERR_INVALID_DATA,
                 "Node '%s' raw size and length fields differ for uncompressed node: %d <> %d.\n",
                 handle->filename, node->size, node->length);
             goto out;
         }
         if (fread(handle->rawData, sizeof(Uint8), node->size, handle->lib->packFile->file) != node->size)
         {
-            ret = dmError(DMERR_FREAD,
+            ret = dmErrorDBG(DMERR_FREAD,
                 "Error reading raw node data '%s', %d bytes.\n",
                 handle->filename, node->size);
             goto out;
@@ -999,7 +999,7 @@
             char *fname = dm_strdup_printf("%s/%s", path, dh->d_name);
             if (stat(fname, &sbuf) == -1)
             {
-                ret = dmError(dmGetErrno(),
+                ret = dmErrorDBG(dmGetErrno(),
                     "Could not stat() %s, #%d: %s\n",
                     fname, ret, dmErrorStr(ret));
                 dmFree(fname);
@@ -1061,14 +1061,14 @@
         {
             if ((flags & DRF_USE_STDIO) == 0)
             {
-                return dmError(DMERR_INIT_FAIL,
+                return dmErrorDBG(DMERR_INIT_FAIL,
                     "Error opening PACK file '%s', #%d: %s\n",
                     lib->packFilename, ret, dmErrorStr(ret));
             }
             else
             {
                 // Non-fatal
-                dmError(DMERR_INIT_FAIL,
+                dmErrorDBG(DMERR_INIT_FAIL,
                     "Failed to open PACK, falling back to STDIO, '%s' %d: %s\n",
                     lib->packFilename, ret, dmErrorStr(ret));
             }
@@ -1081,7 +1081,7 @@
                 DMResource *res = dmResourceNew(lib, node->filename, node->size, node->flags & DMF_PACK_MASK);
                 if (res == NULL)
                 {
-                    return dmError(DMERR_INIT_FAIL,
+                    return dmErrorDBG(DMERR_INIT_FAIL,
                         "Could not allocate memory for resource node '%s' [0x%08x], %d bytes.\n",
                         node->filename, node->flags, node->size);
                 }
@@ -1142,7 +1142,7 @@
         int ret = dmPackClose(lib->packFile);
         if (ret != DMERR_OK)
         {
-            dmError(ret, "Error closing PACK, #%i: %s\n",
+            dmErrorDBG(ret, "Error closing PACK, #%i: %s\n",
                 ret, dmErrorStr(ret));
         }
 
@@ -1195,7 +1195,7 @@
         // Attempt to preload the resource
         if ((ret = dmResourcePreload(lib->preload)) != DMERR_OK)
         {
-            dmError(ret, "Error preloading '%s', %d: %s\n",
+            dmErrorDBG(ret, "Error preloading '%s', %d: %s\n",
                 lib->preload->filename, ret, dmErrorStr(ret));
             goto error;
         }
--- a/src/dmzlib.c	Sun Mar 01 17:47:50 2015 +0200
+++ b/src/dmzlib.c	Sun Mar 01 18:03:08 2015 +0200
@@ -73,7 +73,7 @@
     {
         if (sizes[i] > (1 << i))
         {
-            return dmError(DMERR_INTERNAL,
+            return dmErrorDBG(DMERR_INTERNAL,
                 "Sizes assert failed while building Huffman codes.\n");
         }
     }
@@ -88,7 +88,7 @@
 
         if (sizes[i] && code - 1 >= (1 << i))
         {
-            return dmError(DMERR_INVALID_DATA,
+            return dmErrorDBG(DMERR_INVALID_DATA,
                 "Bad Huffman code lengths.\n");
         }
 
@@ -176,7 +176,7 @@
 
     if (s == 16)
     {
-        return dmError(DMERR_DATA_ERROR,
+        return dmErrorDBG(DMERR_DATA_ERROR,
             "Bad Huffman code.\n");
     }
 
@@ -221,7 +221,7 @@
 
     if (!ctx->expandable)
     {
-        return dmError(DMERR_BOUNDS,
+        return dmErrorDBG(DMERR_BOUNDS,
             "Output buffer limit hit, and is not expandable.\n");
     }
 
@@ -233,7 +233,7 @@
 
     if ((newBuf = (Uint8 *) dmRealloc(ctx->zoutStart, limit)) == NULL)
     {
-        return dmError(DMERR_MALLOC,
+        return dmErrorDBG(DMERR_MALLOC,
             "Could not reallocate buffer.\n");
     }
 
@@ -316,7 +316,7 @@
 
             if (zout - ctx->zoutStart < dist)
             {
-                return dmError(DMERR_DATA_ERROR,
+                return dmErrorDBG(DMERR_DATA_ERROR,
                     "Bad Huffman block distance.\n");
             }
 
@@ -406,7 +406,7 @@
 
     if (n != hlit + hdist)
     {
-        return dmError(DMERR_DATA_ERROR,
+        return dmErrorDBG(DMERR_DATA_ERROR,
             "Bad huffman codelengths.\n");
     }
 
@@ -448,21 +448,21 @@
 
     if (nlen != (len ^ 0xffff))
     {
-        return dmError(DMERR_DATA_ERROR,
+        return dmErrorDBG(DMERR_DATA_ERROR,
             "Compressed data corrupt %04x :: %04x [%04x].\n",
             nlen, len, len ^ 0xffff);
     }
 
     if (ctx->zbuffer + len > ctx->zbufferEnd)
     {
-        return dmError(DMERR_BOUNDS,
+        return dmErrorDBG(DMERR_BOUNDS,
             "Read past buffer, probably corrupt compressed data.\n");
     }
 
     if (ctx->zout + len > ctx->zoutEnd &&
         (ret = dmZLibExpand(ctx, ctx->zout, len)) != DMERR_OK)
     {
-        return dmError(DMERR_DATA_ERROR,
+        return dmErrorDBG(DMERR_DATA_ERROR,
             "Could not expand output buffer: %d, %s\n",
             ret, dmErrorStr(ret));
     }
@@ -532,14 +532,14 @@
     // is a multiple of 31."
     if ((cmf * 256 + flags) % 31 != 0)
     {
-        return dmError(DMERR_INVALID_DATA,
+        return dmErrorDBG(DMERR_INVALID_DATA,
             "Bad zlib header.");
     }
 
     // We only support compression method 8
     if (cmethod != 8)
     {
-        return dmError(DMERR_INVALID_DATA,
+        return dmErrorDBG(DMERR_INVALID_DATA,
             "Bad or unsupported zlib compression method %d.\n",
             cmethod);
     }
@@ -547,7 +547,7 @@
     if (checkPNG && (flags & 32))
     {
         // preset dictionary not allowed in png
-        return dmError(DMERR_NOT_SUPPORTED,
+        return dmErrorDBG(DMERR_NOT_SUPPORTED,
             "Preset dictionary not allowed in PNG.\n");
     }
     return DMERR_OK;