#include "buffer.h" /* * * Inline extern prototypes * * */ LSUP_Buffer *LSUP_buffer_new (const size_t size, const void *data); LSUP_rc LSUP_buffer_init ( LSUP_Buffer *buf, const size_t size, const void *data); bool LSUP_buffer_eq (const LSUP_Buffer *buf1, const LSUP_Buffer *buf2); int LSUP_buffer_cmp (const LSUP_Buffer *buf1, const LSUP_Buffer *buf2); /* * * API * * */ LSUP_rc LSUP_buffer_init (LSUP_Buffer *buf, const size_t size, const void *data) { // If size is zero, addr becomes NULL. void *tmp = realloc (buf->addr, size); if (UNLIKELY (size > 0 && tmp == NULL)) return LSUP_MEM_ERR; buf->addr = tmp; buf->size = size; if (data) memcpy (buf->addr, data, buf->size); return LSUP_OK; } void LSUP_buffer_print (const LSUP_Buffer *buf) { for (size_t i = 0; i < buf->size; i++) { char chr = ((char*)buf->addr)[i]; if (isprint (chr)) { fputc (chr, stdout); } else { printf ("\\x%02x", chr); } } printf ("\n"); } void LSUP_buffer_done (LSUP_Buffer *buf) { if (LIKELY (buf)) free (buf->addr); } void LSUP_buffer_free (LSUP_Buffer *buf) { LSUP_buffer_done (buf); free (buf); }