1 /* Chunk handling: Flexible arrays
2 ** ===============================
9 /* Create a chunk with a certain allocation unit
12 PUBLIC HTChunk * HTChunkCreate ARGS1 (int,grow)
14 HTChunk * ch = (HTChunk *) malloc(sizeof(HTChunk));
24 /* Clear a chunk of all data
25 ** --------------------------
27 PUBLIC void HTChunkClear ARGS1 (HTChunk *,ch)
41 PUBLIC void HTChunkPutc ARGS2 (HTChunk *,ch, char,c)
43 if (ch->size >= ch->allocated) {
44 ch->allocated = ch->allocated + ch->growby;
45 ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)
46 : (char *)malloc(ch->allocated);
47 if (!ch->data) outofmem(__FILE__, "HTChunkPutc");
49 ch->data[ch->size++] = c;
53 /* Ensure a certain size
54 ** ---------------------
56 PUBLIC void HTChunkEnsure ARGS2 (HTChunk *,ch, int,needed)
58 if (needed <= ch->allocated) return;
59 ch->allocated = needed-1 - ((needed-1) % ch->growby)
60 + ch->growby; /* Round up */
61 ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)
62 : (char *)malloc(ch->allocated);
63 if (ch->data == NULL) outofmem(__FILE__, "HTChunkEnsure");
70 PUBLIC void HTChunkTerminate ARGS1 (HTChunk *,ch)
72 HTChunkPutc(ch, (char)0);
79 PUBLIC void HTChunkPuts ARGS2 (HTChunk *,ch, CONST char *,s)