mirror of
https://github.com/jorisvink/kore
synced 2025-03-09 04:29:02 -04:00
Change kore_realloc() behaviour a bit.
If kore_realloc() decides that a new block must be allocated it will explicitly call the new kore_free_zero() function to erase the contents of the old block once the move is done.
This commit is contained in:
parent
a5342a0120
commit
3e944e106b
@ -908,6 +908,7 @@ void *kore_calloc(size_t, size_t);
|
||||
void *kore_realloc(void *, size_t);
|
||||
void kore_free(void *);
|
||||
void kore_mem_init(void);
|
||||
void kore_free_zero(void *);
|
||||
void kore_mem_cleanup(void);
|
||||
void kore_mem_untag(void *);
|
||||
void *kore_mem_lookup(u_int32_t);
|
||||
|
20
src/mem.c
20
src/mem.c
@ -123,11 +123,11 @@ kore_realloc(void *ptr, size_t len)
|
||||
nptr = mem_alloc(len);
|
||||
} else {
|
||||
mem = meminfo(ptr);
|
||||
if (len == mem->len)
|
||||
if (len <= mem->len)
|
||||
return (ptr);
|
||||
nptr = mem_alloc(len);
|
||||
memcpy(nptr, ptr, MIN(len, mem->len));
|
||||
kore_free(ptr);
|
||||
memcpy(nptr, ptr, mem->len);
|
||||
kore_free_zero(ptr);
|
||||
}
|
||||
|
||||
return (nptr);
|
||||
@ -149,6 +149,20 @@ kore_calloc(size_t memb, size_t len)
|
||||
return (ptr);
|
||||
}
|
||||
|
||||
void
|
||||
kore_free_zero(void *ptr)
|
||||
{
|
||||
struct meminfo *mem;
|
||||
|
||||
if (ptr == NULL)
|
||||
return;
|
||||
|
||||
mem = meminfo(ptr);
|
||||
kore_mem_zero(ptr, mem->len);
|
||||
|
||||
kore_free(ptr);
|
||||
}
|
||||
|
||||
void
|
||||
kore_free(void *ptr)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user