comparison src/dmgrowbuf.c @ 1536:064fc2e3ee64

Add compile-time debugging information to DMGrowBuf.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 12 May 2018 04:12:46 +0300
parents 260bf529a8f2
children 383ca5f6e78b
comparison
equal deleted inserted replaced
1535:2f7ff28ea56e 1536:064fc2e3ee64
4 * Programmed and designed by Matti 'ccr' Hamalainen 4 * Programmed and designed by Matti 'ccr' Hamalainen
5 * (C) Copyright 2018 Tecnic Software productions (TNSP) 5 * (C) Copyright 2018 Tecnic Software productions (TNSP)
6 */ 6 */
7 #include "dmgrowbuf.h" 7 #include "dmgrowbuf.h"
8 8
9 //#define DM_GROWBUF_DEBUG 1
10
11 #ifdef DM_GROWBUF_DEBUG
12 # define DM_DBG(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
13 #else
14 # define DM_DBG(...) do { } while (0)
15 #endif
16
9 17
10 int dmGrowBufInit(DMGrowBuf *buf) 18 int dmGrowBufInit(DMGrowBuf *buf)
11 { 19 {
20 DM_DBG("dmGrowBufInit(%p)\n", buf);
12 if (buf == NULL) 21 if (buf == NULL)
13 return DMERR_NULLPTR; 22 return DMERR_NULLPTR;
14 23
15 memset(buf, 0, sizeof(DMGrowBuf)); 24 memset(buf, 0, sizeof(DMGrowBuf));
16 25
20 29
21 int dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow) 30 int dmGrowBufAlloc(DMGrowBuf *buf, const size_t initial, const size_t mingrow)
22 { 31 {
23 int res; 32 int res;
24 33
34 DM_DBG("dmGrowBufAlloc(%p, %" DM_PRIu_SIZE_T ", %" DM_PRIu_SIZE_T ")\n", buf, initial, mingrow);
25 if ((res = dmGrowBufInit(buf)) != DMERR_OK) 35 if ((res = dmGrowBufInit(buf)) != DMERR_OK)
26 return res; 36 return res;
27 37
28 buf->len = 0; 38 buf->len = 0;
29 buf->offs = 0; 39 buf->offs = 0;
43 { 53 {
44 int res; 54 int res;
45 if (pbuf == NULL) 55 if (pbuf == NULL)
46 return DMERR_NULLPTR; 56 return DMERR_NULLPTR;
47 57
58 DM_DBG("dmGrowBufNew(%p, %" DM_PRIu_SIZE_T ", %" DM_PRIu_SIZE_T ")\n", pbuf, initial, mingrow);
48 if ((*pbuf = dmMalloc0(sizeof(DMGrowBuf))) == NULL) 59 if ((*pbuf = dmMalloc0(sizeof(DMGrowBuf))) == NULL)
49 return DMERR_MALLOC; 60 return DMERR_MALLOC;
50 61
51 if ((res = dmGrowBufAlloc(*pbuf, initial, mingrow)) != DMERR_OK) 62 if ((res = dmGrowBufAlloc(*pbuf, initial, mingrow)) != DMERR_OK)
52 { 63 {
63 } 74 }
64 75
65 76
66 void dmGrowBufFree(DMGrowBuf *buf) 77 void dmGrowBufFree(DMGrowBuf *buf)
67 { 78 {
79 DM_DBG("dmGrowBufFree(%p)\n", buf);
68 if (buf != NULL) 80 if (buf != NULL)
69 { 81 {
82 DM_DBG(
83 " buf->adata = %p\n"
84 " buf->data = %p\n"
85 " buf->allocated = %s\n",
86 buf->adata, buf->data, buf->allocated ? "YES" : "NO");
87
70 dmFreeR(&buf->adata); 88 dmFreeR(&buf->adata);
71 buf->data = NULL; 89 buf->data = NULL;
72 90
73 if (buf->allocated) 91 if (buf->allocated)
74 dmFree(buf); 92 dmFree(buf);
78 96
79 void dmGrowBufPush(DMGrowBuf *buf) 97 void dmGrowBufPush(DMGrowBuf *buf)
80 { 98 {
81 if (buf != NULL && buf->adata != NULL) 99 if (buf != NULL && buf->adata != NULL)
82 { 100 {
101 DM_DBG("dmGrowBufPush(%p): size=%" DM_PRIu_SIZE_T "\n"
102 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf, buf->size, buf->nstack, buf->offs, buf->len);
103
83 buf->stack[buf->nstack].offs = buf->offs; 104 buf->stack[buf->nstack].offs = buf->offs;
84 buf->stack[buf->nstack].len = buf->len; 105 buf->stack[buf->nstack].len = buf->len;
85 buf->nstack++; 106 buf->nstack++;
86 107
87 buf->offs = buf->len; 108 buf->offs = buf->len;
88 buf->data = buf->adata + buf->offs; 109 buf->data = buf->adata + buf->offs;
89 buf->len = 0; 110 buf->len = 0;
90 } 111
112 DM_DBG(
113 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf->nstack, buf->offs, buf->len);
114 }
115 else
116 DM_DBG("dmGrowBufPush(%p)\n", buf);
91 } 117 }
92 118
93 119
94 void dmGrowBufPop(DMGrowBuf *buf) 120 void dmGrowBufPop(DMGrowBuf *buf)
95 { 121 {
96 if (buf != NULL && buf->adata != NULL && buf->nstack > 0) 122 if (buf != NULL && buf->adata != NULL && buf->nstack > 0)
97 { 123 {
124 DM_DBG("dmGrowBufPop(%p): size=%" DM_PRIu_SIZE_T "\n"
125 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf, buf->size, buf->nstack, buf->offs, buf->len);
126
98 buf->nstack--; 127 buf->nstack--;
99 buf->offs = buf->stack[buf->nstack].offs; 128 buf->offs = buf->stack[buf->nstack].offs;
100 buf->len += buf->stack[buf->nstack].len; 129 buf->len += buf->stack[buf->nstack].len;
101 130
102 buf->data = buf->adata + buf->offs; 131 buf->data = buf->adata + buf->offs;
103 } 132
133 DM_DBG(
134 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n", buf->nstack, buf->offs, buf->len);
135
136 }
137 else
138 DM_DBG("dmGrowBufPop(%p)\n", buf);
104 } 139 }
105 140
106 141
107 static BOOL dmGrowBufRealloc(DMGrowBuf *buf, const size_t nsize, const BOOL clear) 142 static BOOL dmGrowBufRealloc(DMGrowBuf *buf, const size_t nsize, const BOOL clear)
108 { 143 {
144 DM_DBG("dmGrowBufRealloc(%p): size=%" DM_PRIu_SIZE_T "\n"
145 " nstack=%d [offs=%" DM_PRIu_SIZE_T ", len=%" DM_PRIu_SIZE_T "]\n",
146 buf, buf->size, buf->nstack, buf->offs, buf->len);
147
109 if ((buf->adata = dmRealloc(buf->adata, nsize)) == NULL) 148 if ((buf->adata = dmRealloc(buf->adata, nsize)) == NULL)
110 return FALSE; 149 return FALSE;
111 150
112 if (clear) 151 if (clear)
113 memset(buf->adata + buf->size, 0, nsize - buf->size); 152 memset(buf->adata + buf->size, 0, nsize - buf->size);