diff --git a/tinyalloc.c b/tinyalloc.c index eb9fa3f..c6749e3 100644 --- a/tinyalloc.c +++ b/tinyalloc.c @@ -268,3 +268,36 @@ size_t ta_num_fresh() { bool ta_check() { return heap_max_blocks == ta_num_free() + ta_num_used() + ta_num_fresh(); } + +static size_t ta_getsize(void *ptr) +{ + Block *block = heap->used; + while (block != NULL) { + if (ptr == block->addr) { + return block->size; + } + block = block->next; + } + return 0; +} + +void *ta_realloc(void *ptr,size_t num) { + size_t c; + size_t ptrsize; + uint8_t* ptrn; + uint8_t* ptro; + ptrsize=ta_getsize(ptr); + if(ptrsize>0){ + Block *block = alloc_block(num); + if (block != NULL) { + ptro=(uint8_t*)ptr; + ptrn=(uint8_t*)block->addr; + if(ptrsize>num) ptrsize=num; + for(c=0;caddr; + } + } + return NULL; +} \ No newline at end of file diff --git a/tinyalloc.h b/tinyalloc.h index 113f147..7ab576b 100644 --- a/tinyalloc.h +++ b/tinyalloc.h @@ -9,6 +9,7 @@ bool ta_init(const void *base, const void *limit, const size_t heap_blocks, cons void *ta_alloc(size_t num); void *ta_calloc(size_t num, size_t size); bool ta_free(void *ptr); +void *ta_realloc(void *ptr,size_t num); size_t ta_num_free(); size_t ta_num_used();