#include <buffer.h>
buffer_flush(&b);
buffer_put(&b,x,len);
buffer_putalign(&b,x,len);
buffer_putflush(&b,x,len);
buffer_puts(&b,x);
buffer_putsalign(&b,x);
buffer_putsflush(&b,x);
buffer b;
char *x;
unsigned int len;
buffer_put
appends
x[0],
x[1],
...,
x[len-1]
to a string stored in preallocated space.
buffer_flush
feeds the string to a write operation
and then empties the string.
buffer_put
calls buffer_flush
automatically if it runs out of space.
The preallocated space and the write operation are specified by b. You must initialize b as described below before calling buffer_put or buffer_flush.
On success, buffer_put and buffer_flush return 0. On error, buffer_put and buffer_flush return -1, setting errno appropriately.
buffer_putalign is similar to buffer_put. The difference is that, when there isn't enough space for new data, buffer_put calls buffer_flush before copying any data, while buffer_putalign fills all available space with data before calling buffer_flush.
buffer_putflush is similar to buffer_put followed by buffer_flush.
buffer_puts, buffer_putsalign, and buffer_putsflush are just like buffer_put, buffer_putalign, and buffer_putflush with len determined as the number of bytes before the first \0 in x.
#include <buffer.h>
buffer_init(&b,op,fd,y,ylen);
buffer b;
int (*op)(int,char *,int);
int fd;
char *y;
unsigned int ylen;
buffer_init
prepares b to store a string in
y[0],
y[1],
...,
y[ylen-1].
Initially the string is empty.
buffer_init also prepares b to use the write operation specified by op and fd. buffer_flush feeds a string d[0], d[1], ..., d[dlen-1] to the write operation by calling
op(fd,d,dlen)
If op successfully
handles one or more bytes at the beginning of the string,
it must return the number of bytes handled;
if this number is smaller than dlen,
buffer_flush
will call op again with the rest of the string.
If op does not handle any bytes,
and does not encounter an error,
it must return 0,
or return -1 with errno set to error_intr;
in either case,
buffer_flush
will immediately call op again.
If op encounters an error,
it must return -1
with errno set to something other than error_intr;
buffer_flush
will pass the error to the caller.
You can use
buffer b = BUFFER_INIT(op,fd,y,ylen);
to initialize b statically
if op, fd, y,
and ylen
are compile-time constants.
You can call buffer_init again at any time. Note that this discards the currently buffered string.