From 21832851af1d601129c5fb7a8b3f7892656b10db Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Mon, 16 Nov 2009 08:14:19 +0000 Subject: [PATCH] Add a function to slice the buffer. --- src/buffer.c | 16 ++++++++++++++++ src/buffer.h | 3 +++ src/libdivecomputer.symbols | 1 + 3 files changed, 20 insertions(+) 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