示例#1
0
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;
}
示例#2
0
void
cmd_checkbuffer_dbg(void *ptr, const char *file, int line)
{
    if (ptr != NULL)
    {
        ptr = get_base_ptr(ptr);
        check_redzone(ptr, file, line);
    }
}
示例#3
0
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));
}
示例#4
0
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);
}
示例#5
0
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);
}