1 #include "Hmisc.h" 2 Hmisc_AllocStringBuffer(size_t blen,Hmisc_StringBuffer * buf)3char *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)29void 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