Mercurial > hg > dmlib
comparison src/dmgrowbuf.c @ 1508:97b8096f16dc
Initialize the memory in growbuf.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 11 May 2018 22:22:23 +0300 |
parents | a0166c4050be |
children | 15afe578f0ae |
comparison
equal
deleted
inserted
replaced
1507:7d012e5acf5c | 1508:97b8096f16dc |
---|---|
28 buf->len = 0; | 28 buf->len = 0; |
29 buf->size = initial; | 29 buf->size = initial; |
30 buf->mingrow = mingrow; | 30 buf->mingrow = mingrow; |
31 buf->allocated = FALSE; | 31 buf->allocated = FALSE; |
32 | 32 |
33 if ((buf->data = dmMalloc(initial)) == NULL) | 33 if ((buf->data = dmMalloc0(initial)) == NULL) |
34 return DMERR_MALLOC; | 34 return DMERR_MALLOC; |
35 | 35 |
36 return DMERR_OK; | 36 return DMERR_OK; |
37 } | 37 } |
38 | 38 |
72 } | 72 } |
73 | 73 |
74 | 74 |
75 BOOL dmGrowBufGrow(DMGrowBuf *buf, const size_t amount) | 75 BOOL dmGrowBufGrow(DMGrowBuf *buf, const size_t amount) |
76 { | 76 { |
77 if (buf->data == NULL || buf->len + amount > buf->size) | 77 size_t grow = (amount > buf->mingrow) ? amount : buf->mingrow; |
78 if (buf->data == NULL || buf->len + grow > buf->size) | |
78 { | 79 { |
79 buf->size += amount + (buf->mingrow > 0 ? buf->mingrow : 1024); | 80 size_t prev = buf->size; |
81 buf->size += grow; | |
80 if ((buf->data = dmRealloc(buf->data, buf->size)) == NULL) | 82 if ((buf->data = dmRealloc(buf->data, buf->size)) == NULL) |
81 return FALSE; | 83 return FALSE; |
84 | |
85 memset(buf->data + prev, 0, buf->size - prev); | |
82 } | 86 } |
83 | 87 |
84 return TRUE; | 88 return TRUE; |
85 } | 89 } |
86 | 90 |
87 | 91 |
88 BOOL dmGrowBufCheckGrow(DMGrowBuf *buf, const size_t nsize) | 92 BOOL dmGrowBufCheckGrow(DMGrowBuf *buf, const size_t nsize) |
89 { | 93 { |
90 if (buf->data == NULL || nsize > buf->size) | 94 if (buf->data == NULL || nsize > buf->size) |
91 { | 95 { |
92 buf->size = nsize + (buf->mingrow > 0 ? buf->mingrow : 1024); | 96 size_t prev = buf->size; |
97 buf->size = nsize + buf->mingrow; | |
93 if ((buf->data = dmRealloc(buf->data, buf->size)) == NULL) | 98 if ((buf->data = dmRealloc(buf->data, buf->size)) == NULL) |
94 return FALSE; | 99 return FALSE; |
100 | |
101 memset(buf->data + prev, 0, buf->size - prev); | |
95 } | 102 } |
96 | 103 |
97 return TRUE; | 104 return TRUE; |
98 } | 105 } |
99 | 106 |