10 char *tail; /* Points to first "free" char (usually '\0') */
15 StringBuf newStringBuf(void)
17 StringBuf sb = malloc(sizeof(struct StringBufRec));
19 sb->buf = malloc(BUF_CHUNK * sizeof(char));
22 sb->allocated = BUF_CHUNK;
28 void freeStringBuf(StringBuf sb)
34 void truncStringBuf(StringBuf sb)
38 sb->free = sb->allocated;
41 void stripTrailingBlanksStringBuf(StringBuf sb)
43 while (sb->free != sb->allocated) {
44 if (! isspace(*(sb->tail - 1))) {
53 char *getStringBuf(StringBuf sb)
58 void appendStringBufAux(StringBuf sb, char *s, int nl)
63 /* If free == l there is no room for NULL terminator! */
64 while ((l + nl + 1) > sb->free) {
65 sb->allocated += BUF_CHUNK;
66 sb->free += BUF_CHUNK;
67 sb->buf = realloc(sb->buf, sb->allocated);
68 sb->tail = sb->buf + (sb->allocated - sb->free);