diff --git a/src/buffer.c b/src/buffer.c index daefb5b..a374017 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -231,6 +231,22 @@ dc_buffer_prepend (dc_buffer_t *buffer, const unsigned char data[], size_t size) } +int +dc_buffer_slice (dc_buffer_t *buffer, size_t offset, size_t size) +{ + if (buffer == NULL) + return 0; + + if (offset + size >= buffer->size) + return 0; + + buffer->offset += offset; + buffer->size = size; + + return 1; +} + + size_t dc_buffer_get_size (dc_buffer_t *buffer) { diff --git a/src/buffer.h b/src/buffer.h index a26389f..dd97a87 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -49,6 +49,9 @@ dc_buffer_append (dc_buffer_t *buffer, const unsigned char data[], size_t size); int dc_buffer_prepend (dc_buffer_t *buffer, const unsigned char data[], size_t size); +int +dc_buffer_slice (dc_buffer_t *buffer, size_t offset, size_t size); + size_t dc_buffer_get_size (dc_buffer_t *buffer); diff --git a/src/libdivecomputer.symbols b/src/libdivecomputer.symbols index f480291..ab5a569 100644 --- a/src/libdivecomputer.symbols +++ b/src/libdivecomputer.symbols @@ -5,6 +5,7 @@ dc_buffer_reserve dc_buffer_resize dc_buffer_append dc_buffer_prepend +dc_buffer_slice dc_buffer_get_size dc_buffer_get_data