void *rt_realloc(void *rmem, rt_size_t newsize) { void *new_ptr; struct rt_memheap_item *header_ptr; if (rmem == RT_NULL) return rt_malloc(newsize); /* get old memory item */ header_ptr = (struct rt_memheap_item *) ((rt_uint8_t *)rmem - RT_MEMHEAP_SIZE); new_ptr = rt_memheap_realloc(header_ptr->pool_ptr, rmem, newsize); if (new_ptr == RT_NULL && newsize != 0) { /* allocate memory block from other memheap */ new_ptr = rt_malloc(newsize); if (new_ptr != RT_NULL && rmem != RT_NULL) { rt_size_t oldsize; /* get the size of old memory block */ oldsize = MEMITEM_SIZE(header_ptr); if (newsize > oldsize) rt_memcpy(new_ptr, rmem, oldsize); else rt_memcpy(new_ptr, rmem, newsize); } } return new_ptr; }
void *sram_realloc(void *ptr, unsigned long size) { return rt_memheap_realloc(&system_heap, ptr, size); }