/usr/include/re/re_mbuf.h is in libre-dev 0.4.14-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | /**
* @file re_mbuf.h Interface to memory buffers
*
* Copyright (C) 2010 Creytiv.com
*/
#include <stdarg.h>
#ifndef RELEASE
#define MBUF_DEBUG 1 /**< Mbuf debugging (0 or 1) */
#endif
#if MBUF_DEBUG
/** Check that mbuf position does not exceed end */
#define MBUF_CHECK_POS(mb) \
if ((mb) && (mb)->pos > (mb)->end) { \
BREAKPOINT; \
}
/** Check that mbuf end does not exceed size */
#define MBUF_CHECK_END(mb) \
if ((mb) && (mb)->end > (mb)->size) { \
BREAKPOINT; \
}
#else
#define MBUF_CHECK_POS(mb)
#define MBUF_CHECK_END(mb)
#endif
/** Defines a memory buffer */
struct mbuf {
uint8_t *buf; /**< Buffer memory */
size_t size; /**< Size of buffer */
size_t pos; /**< Position in buffer */
size_t end; /**< End of buffer */
};
struct pl;
struct re_printf;
struct mbuf *mbuf_alloc(size_t size);
struct mbuf *mbuf_alloc_ref(struct mbuf *mbr);
void mbuf_init(struct mbuf *mb);
void mbuf_reset(struct mbuf *mb);
int mbuf_resize(struct mbuf *mb, size_t size);
void mbuf_trim(struct mbuf *mb);
int mbuf_shift(struct mbuf *mb, ssize_t shift);
int mbuf_write_mem(struct mbuf *mb, const uint8_t *buf, size_t size);
int mbuf_write_u8(struct mbuf *mb, uint8_t v);
int mbuf_write_u16(struct mbuf *mb, uint16_t v);
int mbuf_write_u32(struct mbuf *mb, uint32_t v);
int mbuf_write_u64(struct mbuf *mb, uint64_t v);
int mbuf_write_str(struct mbuf *mb, const char *str);
int mbuf_write_pl(struct mbuf *mb, const struct pl *pl);
int mbuf_read_mem(struct mbuf *mb, uint8_t *buf, size_t size);
uint8_t mbuf_read_u8(struct mbuf *mb);
uint16_t mbuf_read_u16(struct mbuf *mb);
uint32_t mbuf_read_u32(struct mbuf *mb);
uint64_t mbuf_read_u64(struct mbuf *mb);
int mbuf_read_str(struct mbuf *mb, char *str, size_t size);
int mbuf_strdup(struct mbuf *mb, char **strp, size_t len);
int mbuf_vprintf(struct mbuf *mb, const char *fmt, va_list ap);
int mbuf_printf(struct mbuf *mb, const char *fmt, ...);
int mbuf_write_pl_skip(struct mbuf *mb, const struct pl *pl,
const struct pl *skip);
int mbuf_fill(struct mbuf *mb, uint8_t c, size_t n);
int mbuf_debug(struct re_printf *pf, const struct mbuf *mb);
/**
* Get the buffer from the current position
*
* @param mb Memory buffer
*
* @return Current buffer
*/
static inline uint8_t *mbuf_buf(const struct mbuf *mb)
{
return mb ? mb->buf + mb->pos : (uint8_t *)NULL;
}
/**
* Get number of bytes left in a memory buffer, from current position to end
*
* @param mb Memory buffer
*
* @return Number of bytes left
*/
static inline size_t mbuf_get_left(const struct mbuf *mb)
{
return (mb && (mb->end > mb->pos)) ? (mb->end - mb->pos) : 0;
}
/**
* Get available space in buffer (size - pos)
*
* @param mb Memory buffer
*
* @return Number of bytes available in buffer
*/
static inline size_t mbuf_get_space(const struct mbuf *mb)
{
return (mb && (mb->size > mb->pos)) ? (mb->size - mb->pos) : 0;
}
/**
* Set absolute position
*
* @param mb Memory buffer
* @param pos Position
*/
static inline void mbuf_set_pos(struct mbuf *mb, size_t pos)
{
mb->pos = pos;
MBUF_CHECK_POS(mb);
}
/**
* Set absolute end
*
* @param mb Memory buffer
* @param end End position
*/
static inline void mbuf_set_end(struct mbuf *mb, size_t end)
{
mb->end = end;
MBUF_CHECK_END(mb);
}
/**
* Advance position +/- N bytes
*
* @param mb Memory buffer
* @param n Number of bytes to advance
*/
static inline void mbuf_advance(struct mbuf *mb, ssize_t n)
{
mb->pos += n;
MBUF_CHECK_POS(mb);
}
/**
* Rewind position and end to the beginning of buffer
*
* @param mb Memory buffer
*/
static inline void mbuf_rewind(struct mbuf *mb)
{
mb->pos = mb->end = 0;
}
/**
* Set position to the end of the buffer
*
* @param mb Memory buffer
*/
static inline void mbuf_skip_to_end(struct mbuf *mb)
{
mb->pos = mb->end;
}
|