#include <xtend/file.h>
-lxtend
int xt_read_line_malloc(FILE *stream, char **buff, size_t *buff_size,
size_t *len)
stream: FILE stream from which field is read
buff: Character buffer into which field is copied
buff_size: Size of the array passed to buff
len: Pointer to a variable which will receive the field length
xt_read_line_malloc() reads a single line of text (up to the next newline
or EOF) from stream, allocating and/or extending the provided buffer if
needed.
The buff_size argument must be initilized to 0 if buff has not
been previously allocated. This will cause an initial allocation to occur.
If buff has been previously allocated, the buff_size must accurately reflect
the allocated memory size. This will happen naturally when reusing buff in a
loop, as shown in the example below.
Delimiter ending the read: either newline or EOF
FILE *stream;
char *buff;
size_t buff_len, len;
// Reuse buff to minimize malloc() calls. buff will be extended
// as needed when longer strings are read. Initialize buff here
// rather than above for the most cohesive code.
buff_len = 0;
while ( ffile_read_line_malloc(stream, buff, &buff_len, &len) != EOF )
{
}
dsv_read_field_malloc(3), ffgetc(3)