1
/*****************************************************************************/
2
/******************************** Documentation ******************************/
3
/*****************************************************************************/
5
/*****************************************************************************/
6
/******************************* Include Files *******************************/
7
/*****************************************************************************/
9
/*****************************************************************************/
10
/*********************************** Defines *********************************/
11
/*****************************************************************************/
13
#define DATABUF_FLAG_PRESERVE_HEAD (1 << 0)
16
/*****************************************************************************/
17
/******************************* Type Definitions ****************************/
18
/*****************************************************************************/
20
typedef struct Databuf {
29
/*****************************************************************************/
30
/************************* External Global Variables ***********************/
31
/*****************************************************************************/
33
/*****************************************************************************/
34
/***************************** Inline Functions ****************************/
35
/*****************************************************************************/
37
static inline char *databuf_beg(DataBuf *db)
38
{return (db->alloc_ptr == NULL) ? NULL : db->alloc_ptr+db->offset;}
40
static inline char *databuf_end(DataBuf *db)
41
{return (db->alloc_ptr == NULL) ? NULL : db->alloc_ptr+db->offset+db->len;}
43
static inline char *databuf_alloc_end(DataBuf *db)
44
{return (db->alloc_ptr == NULL) ? NULL : db->alloc_ptr+db->alloc_size;}
46
static inline int databuf_tail_size(DataBuf *db)
47
{return db->alloc_size - (db->offset+db->len);}
49
static inline int databuf_tail_available(DataBuf *db, size_t append_len)
50
{return append_len <= databuf_tail_size(db);}
52
static inline size_t databuf_free_size(DataBuf *db)
53
{return db->alloc_size-db->len;}
55
/*****************************************************************************/
56
/**************************** Exported Functions ***************************/
57
/*****************************************************************************/
59
void databuf_print(DataBuf *db, int print_data, char *fmt, ...);
60
int databuf_init(DataBuf *db, size_t size, unsigned flags);
61
int databuf_free(DataBuf *db);
62
int databuf_append(DataBuf *db, const char *src, size_t src_size);
63
int databuf_advance(DataBuf *db, size_t advance);
64
int databuf_compress(DataBuf *db);
65
int databuf_reset(DataBuf *db);