# HG changeset patch # User Matti Hamalainen # Date 1559348281 -10800 # Node ID b8491ee3cf24368caefb9c5ee211bb755fa77a72 # Parent 84780a9d8d1749b41ba4a7fd2137b9d8d8f398cb Allow NULL buffer argument(s) for dmSetupRLEBuffers() and dmFinishRLEBuffers(). diff -r 84780a9d8d17 -r b8491ee3cf24 tools/lib64gfx.c --- a/tools/lib64gfx.c Wed May 29 13:11:00 2019 +0300 +++ b/tools/lib64gfx.c Sat Jun 01 03:18:01 2019 +0300 @@ -418,17 +418,18 @@ dmFree(stats); } + //#define RLE_DEBUG void dmSetupRLEBuffers(DMGrowBuf *dst, DMGrowBuf *src, const DMCompParams *cfg) { - if (cfg->flags & DM_RLE_BACKWARDS_INPUT) + if (src != NULL && (cfg->flags & DM_RLE_BACKWARDS_INPUT)) { src->offs = src->len; src->backwards = TRUE; } - if (cfg->flags & DM_RLE_BACKWARDS_OUTPUT) + if (dst != NULL && (cfg->flags & DM_RLE_BACKWARDS_OUTPUT)) { dst->backwards = TRUE; dst->offs = dst->size; @@ -436,7 +437,9 @@ #ifdef RLE_DEBUG fprintf(stderr, "dmSetupRLEBuffers:\n"); +if (src != NULL) fprintf(stderr, " src.len=%" DM_PRIx_SIZE_T ", src.size=%" DM_PRIx_SIZE_T ", src.offs=%" DM_PRIx_SIZE_T "\n", src->len, src->size, src->offs); +if (dst != NULL) fprintf(stderr, " dst.len=%" DM_PRIx_SIZE_T ", dst.size=%" DM_PRIx_SIZE_T ", dst.offs=%" DM_PRIx_SIZE_T "\n", dst->len, dst->size, dst->offs); fprintf(stderr, "------------------\n"); #endif @@ -450,35 +453,42 @@ #ifdef RLE_DEBUG fprintf(stderr, "------------------\n"); fprintf(stderr, "dmFinishRLEBuffers:\n"); +if (src != NULL) fprintf(stderr, " src.len=%" DM_PRIx_SIZE_T ", src.size=%" DM_PRIx_SIZE_T ", src.offs=%" DM_PRIx_SIZE_T "\n", src->len, src->size, src->offs); +if (dst != NULL) fprintf(stderr, " dst.len=%" DM_PRIx_SIZE_T ", dst.size=%" DM_PRIx_SIZE_T ", dst.offs=%" DM_PRIx_SIZE_T "\n", dst->len, dst->size, dst->offs); #endif - if (cfg->flags & DM_RLE_BACKWARDS_OUTPUT) - { - memmove(dst->data, dst->data + dst->offs, dst->len); - dst->offs = 0; - } - - switch (cfg->flags & DM_OUT_CROP_MASK) + if (dst != NULL) { - case DM_OUT_CROP_END: - if (cfg->cropOutLen < dst->len) - { - memmove(dst->data, dst->data + dst->len - cfg->cropOutLen, cfg->cropOutLen); - dst->len = cfg->cropOutLen; - } - break; + if (cfg->flags & DM_RLE_BACKWARDS_OUTPUT) + { + memmove(dst->data, dst->data + dst->offs, dst->len); + dst->offs = 0; + } - case DM_OUT_CROP_START: - if (cfg->cropOutLen <= dst->len) - dst->len = cfg->cropOutLen; - break; + switch (cfg->flags & DM_OUT_CROP_MASK) + { + case DM_OUT_CROP_END: + if (cfg->cropOutLen < dst->len) + { + memmove(dst->data, dst->data + dst->len - cfg->cropOutLen, cfg->cropOutLen); + dst->len = cfg->cropOutLen; + } + break; + + case DM_OUT_CROP_START: + if (cfg->cropOutLen <= dst->len) + dst->len = cfg->cropOutLen; + break; + } } #ifdef RLE_DEBUG fprintf(stderr, "ADJUSTED:\n"); +if (src != NULL) fprintf(stderr, " src.len=%" DM_PRIx_SIZE_T ", src.size=%" DM_PRIx_SIZE_T ", src.offs=%" DM_PRIx_SIZE_T "\n", src->len, src->size, src->offs); +if (dst != NULL) fprintf(stderr, " dst.len=%" DM_PRIx_SIZE_T ", dst.size=%" DM_PRIx_SIZE_T ", dst.offs=%" DM_PRIx_SIZE_T "\n", dst->len, dst->size, dst->offs); #endif }