changeset 2151:0a7ebb7198e3

Few additional cleanups in the CDHM decoder, and mark the format support as not-broken anymore.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 04 Jun 2019 15:05:53 +0300
parents b4fbb90937f7
children 44d7e8e2483c
files tools/lib64fmts.c
diffstat 1 files changed, 12 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/tools/lib64fmts.c	Tue Jun 04 15:00:58 2019 +0300
+++ b/tools/lib64fmts.c	Tue Jun 04 15:05:53 2019 +0300
@@ -985,7 +985,7 @@
     Uint8 data, *dstBuf;
     const size_t baseAddr = 0x4000;
     const size_t dstSize = 0x8000 - baseAddr;
-    size_t dstOffs, srcOffs;
+    size_t dstOffs, srcOffs, ncount;
 
     // Allocate output buffer
     if ((dstBuf = dmMalloc0(dstSize)) == NULL)
@@ -994,15 +994,15 @@
             "Could not allocate memory for RLE decoding buffer.\n");
     }
 
-    // Setup input buffer
+    // Setup input and output offsets
+    srcOffs = psrc->len - 1;
     dstOffs = 0x7ff2 - baseAddr - 1;
-    srcOffs = psrc->len - 1;
 
     while (dstOffs > 0 && srcOffs > 0)
     {
+        // Get one byte of data
         data = psrc->data[srcOffs];
 
-
         // Current data byte tells us the mode
         if (data == 0)
         {
@@ -1014,23 +1014,23 @@
                 goto out;
             }
 
-            size_t ncount = psrc->data[--srcOffs];
+            ncount = psrc->data[--srcOffs];
             data = psrc->data[--srcOffs];
 
-            srcOffs--;
-
             if (dstOffs < ncount)
                 goto finish;
 
             dstOffs -= ncount;
-            ncount++;
-            for (size_t n = 0; n < ncount; n++)
+
+            for (size_t n = 0; n < ncount + 1; n++)
                 dstBuf[dstOffs + n] = data;
+
+            srcOffs--;
         }
         else
         {
             // Literal run of data bytes
-            size_t ncount = data;
+            ncount = data;
             if (srcOffs < ncount)
                 ncount = srcOffs;
 
@@ -1041,10 +1041,7 @@
             dstOffs -= ncount - 1;
 
             for (size_t n = 0; n < ncount; n++)
-            {
-                data = psrc->data[srcOffs + n];
-                dstBuf[dstOffs + n] = data;
-            }
+                dstBuf[dstOffs + n] = psrc->data[srcOffs + n];
         }
     }
 
@@ -2265,7 +2262,7 @@
     },
 
     {
-        "cdhp", "Cosmos Designs Hires Manager (packed)", 0x4000, 0, DM_FMT_RD | DM_FMT_BROKEN,
+        "cdhp", "Cosmos Designs Hires Manager (packed)", 0x4000, 0, DM_FMT_RD,
         fmtProbeCosmosDesignsHiresManager,
         fmtDecodeCosmosDesignsHiresManagerPacked, NULL,
         { }, &dmC64CommonFormats[8]