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_realloc(void *, size_t);
|
||||||
void kore_free(void *);
|
void kore_free(void *);
|
||||||
void kore_mem_init(void);
|
void kore_mem_init(void);
|
||||||
|
void kore_free_zero(void *);
|
||||||
void kore_mem_cleanup(void);
|
void kore_mem_cleanup(void);
|
||||||
void kore_mem_untag(void *);
|
void kore_mem_untag(void *);
|
||||||
void *kore_mem_lookup(u_int32_t);
|
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);
|
nptr = mem_alloc(len);
|
||||||
} else {
|
} else {
|
||||||
mem = meminfo(ptr);
|
mem = meminfo(ptr);
|
||||||
if (len == mem->len)
|
if (len <= mem->len)
|
||||||
return (ptr);
|
return (ptr);
|
||||||
nptr = mem_alloc(len);
|
nptr = mem_alloc(len);
|
||||||
memcpy(nptr, ptr, MIN(len, mem->len));
|
memcpy(nptr, ptr, mem->len);
|
||||||
kore_free(ptr);
|
kore_free_zero(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (nptr);
|
return (nptr);
|
||||||
@ -149,6 +149,20 @@ kore_calloc(size_t memb, size_t len)
|
|||||||
return (ptr);
|
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
|
void
|
||||||
kore_free(void *ptr)
|
kore_free(void *ptr)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user