Chunk handling: Flexible arrays

This module implements a flexible array. It is a general utility module. A chunk is a structure which may be extended. These routines create and append data to chunks, automatically reallocating them as necessary. It is garanteed that the array is '\0' terminated at all times, so the terminating function, HTChunkTerminate is only necessary to get the right size in the chunk structure.
#ifndef HTCHUNK_H
#define HTCHUNK_H
typedef struct {
	int	size;		/* In bytes			*/
	int	growby;		/* Allocation unit in bytes	*/
	int	allocated;	/* Current size of *data	*/
	char *	data;		/* Pointer to malloced area or 0 */
} HTChunk;


#ifdef SHORT_NAMES
#define HTChunkClear		HTChClea
#define HTChunkPutc		HTChPutc
#define HTChunkPuts		HTChPuts
#define HTChunkCreate		HTChCrea
#define HTChunkTerminate	HTChTerm
#define HTChunkEnsure		HtChEnsu
#endif


Create new chunk

On entry,

growby
The number of bytes to allocate at a time when the chunk is later extended. Arbitrary but normally a trade-off time vs. memory

On exit,

returns
A chunk pointer to the new chunk,
extern HTChunk * HTChunkCreate PARAMS((int growby));


Free a chunk

On entry,

ch
A valid chunk pointer made by HTChunkCreate()

On exit,

ch
is invalid and may not be used.
extern void HTChunkFree PARAMS((HTChunk * ch));


Clear a chunk

On entry,

ch
A valid chunk pointer made by HTChunkCreate()

On exit,

*ch
The size of the chunk is zero.
extern void HTChunkClear PARAMS((HTChunk * ch));


Ensure a chunk has a certain space in

On entry,

ch
A valid chunk pointer made by HTChunkCreate()
s
The size required

On exit,

*ch
Has size at least s
extern void HTChunkEnsure PARAMS((HTChunk * ch, int s));


Append a character to a chunk

On entry,

ch
A valid chunk pointer made by HTChunkCreate()
c
The character to be appended

On exit,

*ch
Is one character bigger
extern void HTChunkPutc PARAMS((HTChunk * ch, char c));

Append a string to a chunk

On entry,

ch
A valid chunk pointer made by HTChunkCreate()
str
Tpoints to a zero-terminated string to be appended

On exit,

*ch
Is bigger by strlen(str)

extern void HTChunkPuts PARAMS((HTChunk * ch, const char *str));


Append a zero character to a chunk


On entry,

ch
A valid chunk pointer made by HTChunkCreate()

On exit,

*ch
Is one character bigger

extern void HTChunkTerminate PARAMS((HTChunk * ch));

#endif

end