diff src/dmgrowbuf.c @ 1831:ce1a734b016f

Change the logic of how DMGrowBuf works in "backwards" growing mode. Adjust the code that uses this as well.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 22 Jun 2018 16:33:27 +0300
parents 3d4bb20f6739
children 732fa926a5ef
line wrap: on
line diff
--- a/src/dmgrowbuf.c	Fri Jun 22 16:17:06 2018 +0300
+++ b/src/dmgrowbuf.c	Fri Jun 22 16:33:27 2018 +0300
@@ -256,13 +256,13 @@
     {
         if (buf->literal)
         {
-            buf->offs -= len;
-            memcpy(buf->data + buf->offs, data, len);
+            for (size_t n = 0; n < len; n++)
+                buf->data[--buf->offs] = data[len - n];
         }
         else
         {
             for (size_t n = 0; n < len; n++)
-                buf->data[buf->offs--] = data[n];
+                buf->data[--buf->offs] = data[n];
         }
     }
     else
@@ -280,11 +280,10 @@
     if (!dmGrowBufGrow(buf, sizeof(Uint8)))
         return FALSE;
 
-    buf->data[buf->offs] = value;
     if (buf->backwards)
-        buf->offs--;
+        buf->data[--buf->offs] = value;
     else
-        buf->offs++;
+        buf->data[buf->offs++] = value;
 
     return TRUE;
 }
@@ -371,7 +370,7 @@
     if (buf->backwards)
     {
         if (buf->offs > 0)
-            *value = buf->data[buf->offs--];
+            *value = buf->data[--buf->offs];
         else
             return FALSE;
     }