From 1f8c1112d6b9a6ef7e1ccedbd3f1d2b259465cad Mon Sep 17 00:00:00 2001 From: Mathieu Rene Date: Thu, 18 Feb 2010 20:22:32 +0000 Subject: [PATCH] add switch_buffer_peek() git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16696 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_buffer.h | 8 ++++++++ src/switch_buffer.c | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/include/switch_buffer.h b/src/include/switch_buffer.h index 322b7415a7..40c4c5a278 100644 --- a/src/include/switch_buffer.h +++ b/src/include/switch_buffer.h @@ -101,6 +101,14 @@ SWITCH_DECLARE(switch_size_t) switch_buffer_inuse(_In_ switch_buffer_t *buffer); */ SWITCH_DECLARE(switch_size_t) switch_buffer_read(_In_ switch_buffer_t *buffer, _In_ void *data, _In_ switch_size_t datalen); +/*! \brief Read data from a switch_buffer_t up to the ammount of datalen if it is available, without removing read data from buffer. + * \param buffer any buffer of type switch_buffer_t + * \param data pointer to the read data to be returned + * \param datalen amount of data to be returned + * \return int ammount of data actually read + */ +SWITCH_DECLARE(switch_size_t) switch_buffer_peek(_In_ switch_buffer_t *buffer, _In_ void *data, _In_ switch_size_t datalen); + /*! \brief Read data endlessly from a switch_buffer_t * \param buffer any buffer of type switch_buffer_t * \param data pointer to the read data to be returned diff --git a/src/switch_buffer.c b/src/switch_buffer.c index 3f27b56126..09d3219d31 100644 --- a/src/switch_buffer.c +++ b/src/switch_buffer.c @@ -206,6 +206,24 @@ SWITCH_DECLARE(switch_size_t) switch_buffer_read(switch_buffer_t *buffer, void * return reading; } +SWITCH_DECLARE(switch_size_t) switch_buffer_peek(switch_buffer_t *buffer, void *data, switch_size_t datalen) +{ + switch_size_t reading = 0; + + if (buffer->used < 1) { + buffer->used = 0; + return 0; + } else if (buffer->used >= datalen) { + reading = datalen; + } else { + reading = buffer->used; + } + + memcpy(data, buffer->head, reading); + + return reading; +} + SWITCH_DECLARE(switch_size_t) switch_buffer_write(switch_buffer_t *buffer, const void *data, switch_size_t datalen) { switch_size_t freespace, actual_freespace;