changeset 2140:b8491ee3cf24

Allow NULL buffer argument(s) for dmSetupRLEBuffers() and dmFinishRLEBuffers().
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 01 Jun 2019 03:18:01 +0300
parents 84780a9d8d17
children 009ee261704c
files tools/lib64gfx.c
diffstat 1 files changed, 30 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- 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
 }