*/
#include <stdlib.h>
#include "buf.h"
+#include "mem.h"
+
+static void buf_free(void* p_buf);
buf_t* buf_new(size_t size)
{
buf_t* buf = NULL;
if (size > 0)
{
- buf = (buf_t*) malloc( sizeof(buf_t) );
+ buf = (buf_t*) mem_allocate(sizeof(buf_t), &buf_free);
buf->buffer = (void**) malloc( sizeof(void*) * size );
buf->size = size;
buf->reads = 0;
return buf;
}
-void buf_free(buf_t* buf, bool free_contents)
-{
- buf_clear(buf,free_contents);
- free( buf->buffer );
- free( buf );
-}
-
size_t buf_size(buf_t* buf)
{
return (size_t)buf->size;
return full;
}
-void buf_clear(buf_t* buf, bool free_contents)
+void buf_clear(buf_t* buf)
{
- if (free_contents)
+ while ( !buf_empty(buf) )
{
- while ( !buf_empty(buf) )
- {
- free( buf_read(buf) );
- }
+ mem_release( buf_read(buf) );
}
buf->reads = 0;
buf->writes = 0;
return success;
}
+static void buf_free(void* p_buf)
+{
+ buf_clear((buf_t*)p_buf);
+ free( ((buf_t*)p_buf)->buffer );
+}
*/
buf_t* buf_new(size_t size);
-/**
- * @brief Frees the provided buffer and optionally any unread contents.
- *
- * @param buf The buffer to free.
- * @param free_contents Whether unread contents should also be freed.
- */
-void buf_free(buf_t* buf, bool free_contents);
-
/**
* @brief Returns the size of the provided buffer.
*
* @brief Clears all unread data from the provided buffer.
*
* @param buf The buffer to clear.
- * @param free_contents Whether the unread contents should also be freed.
*/
-void buf_clear(buf_t* buf, bool free_contents);
+void buf_clear(buf_t* buf);
/**
* @brief Reads an item from the provided buffer.