void * cmd_realloc_dbg(void *ptr, size_t size, const char *file, int line) { size_t prev_size; void *newptr = NULL; if (ptr == NULL) return cmd_alloc_dbg(size, file, line); if (size == 0) { cmd_free_dbg(ptr, file, line); return NULL; } ptr = get_base_ptr(ptr); prev_size = ((palloc_info)ptr)->size; check_redzone(ptr, file, line); del_mem_from_list(ptr); newptr = realloc(ptr, calculate_size_with_redzone(size)); if (newptr != NULL) { allocated_memory += size - prev_size; add_mem_to_list(newptr); newptr = write_redzone(newptr, size, file, line); } else add_mem_to_list(ptr); return newptr; }
void cmd_checkbuffer_dbg(void *ptr, const char *file, int line) { if (ptr != NULL) { ptr = get_base_ptr(ptr); check_redzone(ptr, file, line); } }
static int is_value_pointer(value_t v, value_t* heap) { value_t *p = addr_v_to_p(v); if (!(p >= heap + bitmap_size && p < heap + region_size)) return 0; unsigned int value; char *base_ptr = get_base_ptr(p, &value, heap); return !!(*base_ptr & (1 << value)); }
void cmd_free_dbg(void *ptr, const char *file, int line) { if (ptr != NULL) { ptr = get_base_ptr(ptr); check_redzone(ptr, file, line); allocations--; allocated_memory -= ((palloc_info)ptr)->size; del_mem_from_list(ptr); } free(ptr); }
static void set_addr_is_pointer(value_t *v, value_t* heap) { unsigned int value; char *base_ptr = get_base_ptr(v, &value, heap); *base_ptr |= (1 << value); }