# HG changeset patch # User Matti Hamalainen # Date 1425225788 -7200 # Node ID 7e54b2d08ce7f7ce81fda4ee2c27c20dfebbf5ef # Parent 1f37239172adda74ac63c981f5a9adbc63740255 Add special debug error message function/macro that can be disabled and compiled out. diff -r 1f37239172ad -r 7e54b2d08ce7 src/dmimage.c --- 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); } diff -r 1f37239172ad -r 7e54b2d08ce7 src/dmlib.h --- 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); diff -r 1f37239172ad -r 7e54b2d08ce7 src/dmpack.c --- 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; } diff -r 1f37239172ad -r 7e54b2d08ce7 src/dmres.c --- 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; } diff -r 1f37239172ad -r 7e54b2d08ce7 src/dmzlib.c --- 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;