10 #define BUF_CHUNK 1024
14 char *tail; /* Points to first "free" char (usually '\0') */
19 StringBuf newStringBuf(void)
21 StringBuf sb = malloc(sizeof(struct StringBufRec));
23 sb->buf = malloc(BUF_CHUNK * sizeof(char));
26 sb->allocated = BUF_CHUNK;
32 void freeStringBuf(StringBuf sb)
38 void truncStringBuf(StringBuf sb)
42 sb->free = sb->allocated;
45 void stripTrailingBlanksStringBuf(StringBuf sb)
47 while (sb->free != sb->allocated) {
48 if (! isspace(*(sb->tail - 1))) {
57 char *getStringBuf(StringBuf sb)
62 void appendStringBufAux(StringBuf sb, char *s, int nl)
67 /* If free == l there is no room for NULL terminator! */
68 while ((l + nl + 1) > sb->free) {
69 sb->allocated += BUF_CHUNK;
70 sb->free += BUF_CHUNK;
71 sb->buf = realloc(sb->buf, sb->allocated);
72 sb->tail = sb->buf + (sb->allocated - sb->free);