From: Alan T. DeKok Date: Sun, 20 Nov 2016 01:52:45 +0000 (-0500) Subject: added fr_ring_buffer_start() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a22259aedbaa57311fd987c8ccbb7af38244f887;p=thirdparty%2Ffreeradius-server.git added fr_ring_buffer_start() Which gets "pointer + size" to the data at the start of the ring buffer. --- diff --git a/src/util/ring_buffer.c b/src/util/ring_buffer.c index fc2ecca50c8..db0ebf70822 100644 --- a/src/util/ring_buffer.c +++ b/src/util/ring_buffer.c @@ -483,3 +483,23 @@ size_t fr_ring_buffer_used(fr_ring_buffer_t *rb) return size; } + +/** Get a pointer to the data at the start of the ring buffer. + * + * @param[in] rb a ring buffer + * @param[out] p_start pointer to data at the start of the ring buffer + * @param[in] p_size size of the allocated block at the start of the ring buffer. + * @return size of the used data in the ring buffer. + * - <0 on error. + * - 0 on success + */ +int fr_ring_buffer_start(fr_ring_buffer_t *rb, uint8_t **p_start, size_t *p_size) +{ +#ifndef NDEBUG + (void) talloc_get_type_abort(rb, fr_ring_buffer_t); +#endif + + *p_start = rb->buffer + rb->data_start; + *p_size = (rb->data_end - rb->data_start); + return 0; +} diff --git a/src/util/ring_buffer.h b/src/util/ring_buffer.h index 699096cc249..66e5ddd9253 100644 --- a/src/util/ring_buffer.h +++ b/src/util/ring_buffer.h @@ -43,6 +43,8 @@ uint8_t *fr_ring_buffer_alloc(fr_ring_buffer_t *rb, size_t size) CC_HINT(nonnull uint8_t *fr_ring_buffer_reserve_split(fr_ring_buffer_t *dst, size_t reserve_size, fr_ring_buffer_t *src, size_t move_size) CC_HINT(nonnull); +int fr_ring_buffer_start(fr_ring_buffer_t *dst, uint8_t **p_start, size_t *p_size); + int fr_ring_buffer_free(fr_ring_buffer_t *rb, size_t size) CC_HINT(nonnull); int fr_ring_buffer_close(fr_ring_buffer_t *rb) CC_HINT(nonnull);