From aa161b9e5822d25c5cdfab56459d5a539a40855c Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Sat, 19 Feb 2022 18:10:26 +0300 Subject: [PATCH] [Core] Allow switch_buffer_write() to fill in a buffer with zeros. Add switch_buffer_zero_fill() --- src/include/switch_buffer.h | 4 +++- src/switch_buffer.c | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/include/switch_buffer.h b/src/include/switch_buffer.h index 7025308544..72d9a18e3b 100644 --- a/src/include/switch_buffer.h +++ b/src/include/switch_buffer.h @@ -132,13 +132,15 @@ SWITCH_DECLARE(void) switch_buffer_set_loops(_In_ switch_buffer_t *buffer, _In_ /*! \brief Write data into a switch_buffer_t up to the length of datalen * \param buffer any buffer of type switch_buffer_t - * \param data pointer to the data to be written + * \param data pointer to the data to be written or 0 to fill in with datalen zeros * \param datalen amount of data to be written * \return int amount of buffer used after the write, or 0 if no space available */ SWITCH_DECLARE(switch_size_t) switch_buffer_write(_In_ switch_buffer_t *buffer, _In_bytecount_(datalen) const void *data, _In_ switch_size_t datalen); +#define switch_buffer_zero_fill(_buffer, _datalen) switch_buffer_write(_buffer, 0, _datalen); + /*! \brief Remove data from the buffer * \param buffer any buffer of type switch_buffer_t * \param datalen amount of data to be removed diff --git a/src/switch_buffer.c b/src/switch_buffer.c index 5ca53a4683..bf31952da5 100644 --- a/src/switch_buffer.c +++ b/src/switch_buffer.c @@ -344,7 +344,12 @@ SWITCH_DECLARE(switch_size_t) switch_buffer_write(switch_buffer_t *buffer, const return 0; } - memcpy(buffer->head + buffer->used, data, datalen); + if (data) { + memcpy(buffer->head + buffer->used, data, datalen); + } else { + memset(buffer->head + buffer->used, 0, datalen); + } + buffer->used += datalen; buffer->actually_used += datalen; return buffer->used;