iobuf: I/O Buffer Management

## Data Structures

struct | iobuf

## Common

typedef struct iobuf | iobuf
int | iobuf_init (iobuf *io, int fd, unsigned bufsize, char *buffer, unsigned flags)
int | iobuf_close (iobuf *io)
int | iobuf_timeout (iobuf *io, int poll_out)
#define | IOBUF_SET_ERROR(io)
#define | iobuf_closed(io)
#define | iobuf_error(io)
#define | iobuf_timedout(io)
#define | iobuf_bad(io)

## Status Flags

unsigned | iobuf_bufsize
#define | IOBUF_EOF 1
#define | IOBUF_ERROR 2
#define | IOBUF_TIMEOUT 4
#define | IOBUF_BADFLAGS 0xf
#define | IOBUF_SEEKABLE 0x10
#define | IOBUF_NEEDSCLOSE 0x20
#define | IOBUF_NEEDSFREE 0x40
#define | IOBUF_NEEDSMUNMAP 0x80

## Mass copying functions.

int | iobuf_copy (ibuf *in, obuf *out)
int | iobuf_copyflush (ibuf *in, obuf *out)
int | ibuf_copytofd (ibuf *in, int out)
int | obuf_copyfromfd (int in, obuf *out)

## Detailed Description

Calling Convention

Unless otherwise specified, the return value is non-zero (true) if the entire requested operation completed, and `0` (false) otherwise.

## Macro Definition Documentation

## iobuf_bad

#define iobuf_bad | ( |  | io | ) |

Value:
((io)->flags & IOBUF_BADFLAGS)
IOBUF_BADFLAGS
#define IOBUF_BADFLAGS
Definition iobuf_common.h:31

True if the `iobuf` is in a "bad" state.

Referenced by ibuf_refill(), obuf_flush(), obuf_putc(), obuf_seek(), obuf_write(), and obuf_write_large().

## IOBUF_BADFLAGS

#define IOBUF_BADFLAGS 0xf

Mask of all the error type flags.

## iobuf_closed

#define iobuf_closed | ( |  | io | ) |

Value:
((io)->fd == -1)

True if the `iobuf` has been closed.

## IOBUF_EOF

#define IOBUF_EOF 1

Reading reached end of file.

Referenced by ibuf_eof(), ibuf_read_large(), ibuf_refill(), and ibuf_seek().

## IOBUF_ERROR

#define IOBUF_ERROR 2

The iobuf has encountered an error.

Referenced by obuf_seek().

## iobuf_error

#define iobuf_error | ( |  | io | ) |

Value:
((io)->flags & IOBUF_ERROR)
IOBUF_ERROR
#define IOBUF_ERROR
Definition iobuf_common.h:27

True if the `iobuf` has an error flag.

## IOBUF_NEEDSCLOSE

#define IOBUF_NEEDSCLOSE 0x20

The file descriptor needs to be closed.

Referenced by ibuf_open(), iobuf_close(), and obuf_open().

## IOBUF_NEEDSFREE

#define IOBUF_NEEDSFREE 0x40

The buffer needs to be deallocated with `free`

Referenced by iobuf_close(), and iobuf_init().

## IOBUF_NEEDSMUNMAP

#define IOBUF_NEEDSMUNMAP 0x80

The buffer needs to be deallocated with `munmap`

Referenced by iobuf_close(), and iobuf_init().

## IOBUF_SEEKABLE

#define IOBUF_SEEKABLE 0x10

`lseek` is possible on the file descriptor.

Referenced by ibuf_open(), and obuf_open().

## IOBUF_SET_ERROR

#define IOBUF_SET_ERROR | ( |  | io | ) |

Value:
do{ \
io->flags |= IOBUF_ERROR; \
io->errnum = errno; \
return 0; \
}while(0)

Set the error flag, save `errno`, and return false.

Referenced by ibuf_read_large(), ibuf_refill(), ibuf_seek(), iobuf_timeout(), obuf_flush(), obuf_sync(), and obuf_write_large().

## iobuf_timedout

#define iobuf_timedout | ( |  | io | ) |

Value:
((io)->flags & IOBUF_TIMEOUT)
IOBUF_TIMEOUT
#define IOBUF_TIMEOUT
Definition iobuf_common.h:29

True if the input or output to the `iobuf` previously timed out.

## IOBUF_TIMEOUT

#define IOBUF_TIMEOUT 4

The timeout expired before the read or write could be completed.

Referenced by iobuf_timeout().

## Function Documentation

## ibuf_copytofd()

int ibuf_copytofd | ( | ibuf * | in,
|  | int | out )

Copy all the data from an `ibuf` to an output file descriptor.

References iobuf::buffer, iobuf::buflen, iobuf::bufstart, ibuf::count, ibuf_eof(), ibuf_error, ibuf_refill(), and ibuf::io.

## iobuf_close()

int iobuf_close | ( | iobuf * | io | ) |

Close an `iobuf` and deallocate the buffer.

References iobuf::buffer, iobuf::bufsize, iobuf::fd, iobuf::flags, IOBUF_NEEDSCLOSE, IOBUF_NEEDSFREE, and IOBUF_NEEDSMUNMAP.

Referenced by obuf_close().

## iobuf_copy()

int iobuf_copy | ( | ibuf * | in,
|  | obuf * | out )

Copy all the data from an `ibuf` to an `obuf`.

References iobuf::buffer, iobuf::buflen, iobuf::bufstart, ibuf_eof(), ibuf_error, ibuf_refill(), ibuf::io, obuf_error, and obuf_write_large().

Referenced by iobuf_copyflush().

## iobuf_copyflush()

int iobuf_copyflush | ( | ibuf * | in,
|  | obuf * | out )

Copy all the data from an `ibuf` to an `obuf`, and flush the `obuf` after writing is completed.

References iobuf_copy(), and obuf_flush().

## iobuf_init()

int iobuf_init | ( | iobuf * | io,
|  | int | fd,
|  | unsigned | bufsize,
|  | char * | buffer,
|  | unsigned | flags )

Initialize an `iobuf` structure.

References iobuf::buffer, iobuf::bufsize, iobuf::fd, iobuf::flags, iobuf_bufsize, IOBUF_NEEDSFREE, and IOBUF_NEEDSMUNMAP.

Referenced by ibuf_init(), and obuf_init().

## iobuf_timeout()

int iobuf_timeout | ( | iobuf * | io,
|  | int | poll_out )

Wait for a file descriptor to be ready for reading or writing.

References iobuf::fd, iobuf::flags, IOBUF_SET_ERROR, IOBUF_TIMEOUT, and iobuf::timeout.

Referenced by ibuf_read_large(), ibuf_refill(), obuf_flush(), and obuf_write_large().

## obuf_copyfromfd()

int obuf_copyfromfd | ( | int | in,
|  | obuf * | out )

Copy all the data from an input file descriptor to an `obuf`.

References iobuf::buffer, iobuf::buflen, obuf::bufpos, iobuf::bufsize, obuf::count, obuf::io, obuf_error, and obuf_flush().

## Variable Documentation

## iobuf_bufsize

unsigned iobuf_bufsize

extern

The default iobuf buffer size, defaults to 8192.

Referenced by iobuf_init().