Commit 05347f56 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

block_Realloc: fix (rewrite) buffer shrinking

parent edb4208e
...@@ -215,7 +215,6 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body ) ...@@ -215,7 +215,6 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body )
if( (size_t)(p_block->p_buffer - p_start) < (size_t)i_prebody if( (size_t)(p_block->p_buffer - p_start) < (size_t)i_prebody
|| (size_t)(p_end - p_block->p_buffer) < i_body ) || (size_t)(p_end - p_block->p_buffer) < i_body )
{ {
/* FIXME: this is really dumb, we should use realloc() */
block_t *p_rea = block_Alloc( requested ); block_t *p_rea = block_Alloc( requested );
if( p_rea ) if( p_rea )
{ {
...@@ -232,16 +231,15 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body ) ...@@ -232,16 +231,15 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body )
* XXX it might not preserve the alignment of p_buffer */ * XXX it might not preserve the alignment of p_buffer */
if( p_end - (p_block->p_buffer + i_body) > BLOCK_WASTE_SIZE ) if( p_end - (p_block->p_buffer + i_body) > BLOCK_WASTE_SIZE )
{ {
const ptrdiff_t i_prebody = p_block->p_buffer - p_start; block_t *p_rea = block_Alloc( requested );
const size_t i_new = requested + 1 * BLOCK_PADDING; if( p_rea )
block_sys_t *p_new = realloc( p_sys, sizeof (*p_sys) + i_new );
if( p_new != NULL )
{ {
p_sys = p_new; BlockMetaCopy( p_rea, p_block );
p_sys->i_allocated_buffer = i_new; p_rea->p_buffer += i_prebody;
p_block = &p_sys->self; p_rea->i_buffer -= i_prebody;
p_block->p_buffer = &p_sys->p_allocated_buffer[i_prebody]; memcpy( p_rea->p_buffer, p_block->p_buffer, p_block->i_buffer );
block_Release( p_block );
p_block = p_rea;
} }
} }
......
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