Revision
16696
Author
mrene
Date
2010-02-18 14:22:32 -0600 (Thu, 18 Feb 2010)

Log Message

add switch_buffer_peek()

Modified Paths

Diff

Modified: freeswitch/trunk/src/include/switch_buffer.h (16695 => 16696)


--- freeswitch/trunk/src/include/switch_buffer.h	2010-02-18 20:02:03 UTC (rev 16695)
+++ freeswitch/trunk/src/include/switch_buffer.h	2010-02-18 20:22:32 UTC (rev 16696)
@@ -101,6 +101,14 @@
  */
 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

Modified: freeswitch/trunk/src/switch_buffer.c (16695 => 16696)


--- freeswitch/trunk/src/switch_buffer.c	2010-02-18 20:02:03 UTC (rev 16695)
+++ freeswitch/trunk/src/switch_buffer.c	2010-02-18 20:22:32 UTC (rev 16696)
@@ -206,6 +206,24 @@
 	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;