10#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
11 #include <sanitizer/asan_interface.h>
15#define lexbor_mraw_meta_set(data, size) \
17 memcpy(data, size, sizeof(size_t)); \
21#define lexbor_mraw_data_begin(data) \
22 &((uint8_t *) (data))[ lexbor_mraw_meta_size() ]
27 size_t size,
size_t begin_len,
size_t new_size,
46 if (chunk_size == 0) {
58#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
120 if (chunk->length == 0) {
124 chunk->length = length;
126#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
127 ASAN_POISON_MEMORY_REGION(chunk->data, chunk->size);
139#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
140 ASAN_UNPOISON_MEMORY_REGION(&chunk->data[chunk->length],
146#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
147 ASAN_POISON_MEMORY_REGION(&chunk->data[chunk->length],
155 chunk->length = chunk->size;
159 if (chunk->next ==
NULL) {
163 chunk->next->prev = chunk;
168#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
192#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
200 ASAN_UNPOISON_MEMORY_REGION(real_data,
216#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
243 size_t size,
size_t begin_len,
size_t new_size,
248 if (chunk->size > (begin_len + new_size)) {
256#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
260 chunk->length = begin_len + new_size;
288#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
289 ASAN_UNPOISON_MEMORY_REGION(chunk->data, chunk->size);
294 chunk->data = new_chunk.
data;
295 chunk->size = new_chunk.
size;
309 chunk->length = chunk->size;
318 size_t size, begin_len;
330 if (chunk->length >=
size) {
331 begin_len = chunk->length -
size;
333 if (&chunk->data[begin_len] ==
data) {
336 size, begin_len, new_size,
338 if (is_valid ==
true) {
344 if (new_size <
size) {
347#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
367#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
396#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
lexbor_bst_t * lexbor_bst_create(void)
lxb_status_t lexbor_bst_init(lexbor_bst_t *bst, size_t size)
void * lexbor_bst_remove_close(lexbor_bst_t *bst, lexbor_bst_entry_t **scope, size_t size, size_t *found_size)
lexbor_bst_entry_t * lexbor_bst_insert(lexbor_bst_t *bst, lexbor_bst_entry_t **scope, size_t size, void *value)
lexbor_bst_t * lexbor_bst_destroy(lexbor_bst_t *bst, bool self_destroy)
void lexbor_bst_clean(lexbor_bst_t *bst)
#define lexbor_bst_root_ref(bst)
@ LXB_STATUS_ERROR_OBJECT_IS_NULL
@ LXB_STATUS_ERROR_WRONG_ARGS
memset(ptr, 0, type->size)
LXB_API void * lexbor_free(void *dst)
LXB_API void * lexbor_calloc(size_t num, size_t size)
lexbor_mem_chunk_t * lexbor_mem_chunk_make(lexbor_mem_t *mem, size_t length)
lexbor_mem_t * lexbor_mem_create(void)
uint8_t * lexbor_mem_chunk_init(lexbor_mem_t *mem, lexbor_mem_chunk_t *chunk, size_t length)
lexbor_mem_t * lexbor_mem_destroy(lexbor_mem_t *mem, bool destroy_self)
lexbor_mem_chunk_t * lexbor_mem_chunk_destroy(lexbor_mem_t *mem, lexbor_mem_chunk_t *chunk, bool self_destroy)
lxb_status_t lexbor_mem_init(lexbor_mem_t *mem, size_t min_chunk_size)
void lexbor_mem_clean(lexbor_mem_t *mem)
struct lexbor_mem lexbor_mem_t
lxb_inline size_t lexbor_mem_align(size_t size)
struct lexbor_mem_chunk lexbor_mem_chunk_t
lxb_inline size_t lexbor_mem_align_floor(size_t size)
lxb_inline void * lexbor_mraw_realloc_tail(lexbor_mraw_t *mraw, void *data, void *begin, size_t size, size_t begin_len, size_t new_size, bool *is_valid)
lexbor_mraw_t * lexbor_mraw_create(void)
void * lexbor_mraw_free(lexbor_mraw_t *mraw, void *data)
void lexbor_mraw_data_size_set_noi(void *data, size_t size)
lxb_inline void * lexbor_mraw_mem_alloc(lexbor_mraw_t *mraw, size_t length)
#define lexbor_mraw_data_begin(data)
void lexbor_mraw_clean(lexbor_mraw_t *mraw)
size_t lexbor_mraw_data_size_noi(void *data)
void * lexbor_mraw_realloc(lexbor_mraw_t *mraw, void *data, size_t new_size)
#define lexbor_mraw_meta_set(data, size)
lxb_status_t lexbor_mraw_init(lexbor_mraw_t *mraw, size_t chunk_size)
void * lexbor_mraw_calloc(lexbor_mraw_t *mraw, size_t size)
void * lexbor_mraw_alloc(lexbor_mraw_t *mraw, size_t size)
void * lexbor_mraw_dup_noi(lexbor_mraw_t *mraw, const void *src, size_t size)
lexbor_mraw_t * lexbor_mraw_destroy(lexbor_mraw_t *mraw, bool destroy_self)
#define lexbor_mraw_meta_size()
lxb_inline size_t lexbor_mraw_data_size(void *data)
lxb_inline void * lexbor_mraw_dup(lexbor_mraw_t *mraw, const void *src, size_t size)
lxb_inline void lexbor_mraw_data_size_set(void *data, size_t size)
lexbor_mem_chunk_t * next
lexbor_mem_chunk_t * chunk
unsigned int lxb_status_t