123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #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);
- }
|