1 #include "Hmisc.h"
2 
Hmisc_AllocStringBuffer(size_t blen,Hmisc_StringBuffer * buf)3 char *Hmisc_AllocStringBuffer(size_t blen, Hmisc_StringBuffer *buf)
4 {
5     size_t blen1, bsize = buf->defaultSize;
6     S_EVALUATOR
7 
8     if(blen * sizeof(char) < buf->bufsize) return buf->data;
9     blen1 = blen = (blen + 1) * sizeof(char);
10     blen = (blen / bsize) * bsize;
11     if(blen < blen1) blen += bsize;
12 
13     if(buf->data == NULL) {
14         buf->data = (char *) malloc(blen);
15         buf->data[0] = '\0';
16     } else
17         buf->data = (char *) realloc(buf->data, blen);
18     buf->bufsize = blen;
19     if(!buf->data) {
20         buf->bufsize = 0;
21         /* don't translate internal error message */
22         PROBLEM "could not allocate memory (%u Mb) in C function 'Hmisc_AllocStringBuffer'",
23               (unsigned int) blen/1024/1024 ERROR;
24     }
25     return buf->data;
26 }
27 
28 
Hmisc_FreeStringBuffer(Hmisc_StringBuffer * buf)29 void Hmisc_FreeStringBuffer(Hmisc_StringBuffer *buf)
30 {
31     if (buf->data != NULL) {
32         free(buf->data);
33         buf->bufsize = 0;
34         buf->data = NULL;
35     }
36 }
37