Commit 4e54fc16 authored by Laurent Aimar's avatar Laurent Aimar

Fixed block_Realloc when block_t->p_buffer has changed.

parent ca8b9219
...@@ -172,21 +172,21 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body ) ...@@ -172,21 +172,21 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body )
return p_rea; return p_rea;
} }
/* We have a very large reserved footer now? Release some of it. */ /* We have a very large reserved footer now? Release some of it.
if ((p_sys->p_allocated_buffer + p_sys->i_allocated_buffer) - * XXX it may not keep the algniment of p_buffer */
(p_block->p_buffer + p_block->i_buffer) > BLOCK_WASTE_SIZE) if( (p_sys->p_allocated_buffer + p_sys->i_allocated_buffer) -
(p_block->p_buffer + p_block->i_buffer) > BLOCK_WASTE_SIZE )
{ {
const size_t news = p_block->i_buffer + 2 * BLOCK_PADDING_SIZE + 16; const ptrdiff_t i_prebody = p_block->p_buffer - p_sys->p_allocated_buffer;
block_sys_t *newb = realloc (p_sys, sizeof (*p_sys) + news); const size_t i_new = i_prebody + p_block->i_buffer + 1 * BLOCK_PADDING_SIZE;
block_sys_t *p_new = realloc( p_sys, sizeof (*p_sys) + i_new );
if (newb != NULL) if( p_new != NULL )
{ {
p_sys = newb; p_sys = p_new;
p_sys->i_allocated_buffer = news; p_sys->i_allocated_buffer = i_new;
p_block = &p_sys->self; p_block = &p_sys->self;
p_block->p_buffer = p_sys->p_allocated_buffer + BLOCK_PADDING_SIZE p_block->p_buffer = &p_sys->p_allocated_buffer[i_prebody];
+ BLOCK_ALIGN
- ((uintptr_t)p_sys->p_allocated_buffer % BLOCK_ALIGN);
} }
} }
return p_block; return p_block;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment