Libparserutils
buffer.c File Reference
#include <string.h>
#include <stdarg.h>
#include <parserutils/utils/buffer.h>

Go to the source code of this file.

Macros

#define DEFAULT_SIZE   (4096)

Functions

parserutils_error parserutils_buffer_create (parserutils_buffer **buffer)
 Create a memory buffer.
parserutils_error parserutils_buffer_destroy (parserutils_buffer *buffer)
 Destroy a memory buffer.
static size_t get_offset (parserutils_buffer *buffer)
 Get current data offset within buffer's allocation.
static void try_rebase (parserutils_buffer *buffer)
 Try moving the data to the start of the allocation.
static parserutils_error ensure_space (parserutils_buffer *buffer, size_t len)
 Ensure that the buffer has enough space at the end to add len bytes.
parserutils_error parserutils_buffer_append (parserutils_buffer *buffer, const uint8_t *data, size_t len)
 Append data to a memory buffer.
parserutils_error parserutils_buffer_appendv (parserutils_buffer *buffer, size_t count,...)
 Append multiple data blocks to a memory buffer.
parserutils_error parserutils_buffer_insert (parserutils_buffer *buffer, size_t offset, const uint8_t *data, size_t len)
 Insert data into a memory buffer.
parserutils_error parserutils_buffer_discard (parserutils_buffer *buffer, size_t offset, size_t len)
 Discard a section of a memory buffer.
parserutils_error parserutils_buffer_grow (parserutils_buffer *buffer)
 Extend the amount of space allocated for a memory buffer.
parserutils_error parserutils_buffer_randomise (parserutils_buffer *buffer)

Macro Definition Documentation

◆ DEFAULT_SIZE

#define DEFAULT_SIZE   (4096)

Definition at line 13 of file buffer.c.

Referenced by parserutils_buffer_create().

Function Documentation

◆ ensure_space()

parserutils_error ensure_space ( parserutils_buffer * buffer,
size_t len )
inlinestatic

Ensure that the buffer has enough space at the end to add len bytes.

Parameters
[in]bufferThe buffer object.
[in]lenNumber of bytes to ensure there is space for.
Returns
PARSERUTILS_OK on success, appropriate error otherwise.

Definition at line 97 of file buffer.c.

References parserutils_buffer::allocated, get_offset(), len, parserutils_buffer::length, parserutils_buffer_grow(), PARSERUTILS_OK, and try_rebase().

Referenced by parserutils_buffer_append(), and parserutils_buffer_insert().

◆ get_offset()

size_t get_offset ( parserutils_buffer * buffer)
inlinestatic

Get current data offset within buffer's allocation.

Parameters
[in]bufferThe buffer object.
Returns
data offset in bytes.

Definition at line 72 of file buffer.c.

References parserutils_buffer::alloc, and parserutils_buffer::data.

Referenced by ensure_space(), parserutils_buffer_grow(), and try_rebase().

◆ parserutils_buffer_append()

parserutils_error parserutils_buffer_append ( parserutils_buffer * buffer,
const uint8_t * data,
size_t len )

Append data to a memory buffer.

Parameters
bufferThe buffer to append to
dataThe data to append
lenThe length, in bytes, of the data to append
Returns
PARSERUTILS_OK on success, appropriate error otherwise.

Definition at line 120 of file buffer.c.

References parserutils_buffer::data, ensure_space(), len, parserutils_buffer::length, and PARSERUTILS_OK.

Referenced by parserutils_buffer_appendv(), parserutils_buffer_insert(), and parserutils_inputstream_append().

◆ parserutils_buffer_appendv()

parserutils_error parserutils_buffer_appendv ( parserutils_buffer * buffer,
size_t count,
... )

Append multiple data blocks to a memory buffer.

Each data block must be passed as a pair of const uint8_t* and size_t

Parameters
bufferThe buffer to append to
countThe number of data blocks to append
...The pairs of pointer and size
Returns
PARSERUTILS_OK on success, appropriate error otherwise.

Definition at line 144 of file buffer.c.

References len, parserutils_buffer_append(), and PARSERUTILS_OK.

◆ parserutils_buffer_create()

parserutils_error parserutils_buffer_create ( parserutils_buffer ** buffer)

Create a memory buffer.

Parameters
bufferPointer to location to receive memory buffer
Returns
PARSERUTILS_OK on success, PARSERUTILS_BADPARM on bad parameters, PARSERUTILS_NOMEM on memory exhausion

Definition at line 23 of file buffer.c.

References parserutils_buffer::alloc, parserutils_buffer::allocated, parserutils_buffer::data, DEFAULT_SIZE, parserutils_buffer::length, PARSERUTILS_BADPARM, PARSERUTILS_NOMEM, and PARSERUTILS_OK.

Referenced by parserutils_inputstream_create().

◆ parserutils_buffer_destroy()

parserutils_error parserutils_buffer_destroy ( parserutils_buffer * buffer)

Destroy a memory buffer.

Parameters
bufferThe buffer to destroy
Returns
PARSERUTILS_OK on success, appropriate error otherwise

Definition at line 55 of file buffer.c.

References parserutils_buffer::alloc, PARSERUTILS_BADPARM, and PARSERUTILS_OK.

Referenced by parserutils_inputstream_create(), and parserutils_inputstream_destroy().

◆ parserutils_buffer_discard()

parserutils_error parserutils_buffer_discard ( parserutils_buffer * buffer,
size_t offset,
size_t len )

Discard a section of a memory buffer.

Parameters
bufferThe buffer to discard data from
offsetThe offset into the buffer of the start of the section
lenThe number of bytes to discard
Returns
PARSERUTILS_OK on success, appropriate error otherwise.

Definition at line 208 of file buffer.c.

References parserutils_buffer::data, len, parserutils_buffer::length, PARSERUTILS_BADPARM, PARSERUTILS_OK, and try_rebase().

Referenced by parserutils_inputstream_refill_buffer(), and parserutils_inputstream_strip_bom().

◆ parserutils_buffer_grow()

parserutils_error parserutils_buffer_grow ( parserutils_buffer * buffer)

Extend the amount of space allocated for a memory buffer.

Parameters
bufferThe buffer to extend
Returns
PARSERUTILS_OK on success, appropriate error otherwise.

Definition at line 235 of file buffer.c.

References parserutils_buffer::alloc, parserutils_buffer::allocated, parserutils_buffer::data, get_offset(), PARSERUTILS_NOMEM, and PARSERUTILS_OK.

Referenced by ensure_space(), and parserutils_inputstream_refill_buffer().

◆ parserutils_buffer_insert()

parserutils_error parserutils_buffer_insert ( parserutils_buffer * buffer,
size_t offset,
const uint8_t * data,
size_t len )

Insert data into a memory buffer.

Parameters
bufferThe buffer to insert into
offsetThe offset into the buffer to insert at
dataThe data to insert
lenThe length, in bytes, of the data to insert
Returns
PARSERUTILS_OK on success, appropriate error otherwise

Definition at line 175 of file buffer.c.

References parserutils_buffer::data, ensure_space(), len, parserutils_buffer::length, PARSERUTILS_BADPARM, parserutils_buffer_append(), and PARSERUTILS_OK.

Referenced by parserutils_inputstream_insert().

◆ parserutils_buffer_randomise()

◆ try_rebase()

void try_rebase ( parserutils_buffer * buffer)
inlinestatic

Try moving the data to the start of the allocation.

Parameters
[in]bufferThe buffer object.

Definition at line 82 of file buffer.c.

References parserutils_buffer::alloc, parserutils_buffer::data, get_offset(), and parserutils_buffer::length.

Referenced by ensure_space(), and parserutils_buffer_discard().