+ block_t *p_rea = block_Alloc( requested );
+ if( p_rea )
+ {
+ BlockMetaCopy( p_rea, p_block );
+ p_rea->p_buffer += i_prebody;
+ p_rea->i_buffer -= i_prebody;
+ memcpy( p_rea->p_buffer, p_block->p_buffer, p_block->i_buffer );
+ }
+ block_Release( p_block );
+ if( p_rea == NULL )
+ return NULL;
+ p_block = p_rea;
+ }
+ else
+ /* We have a very large reserved footer now? Release some of it.
+ * XXX it might not preserve the alignment of p_buffer */
+ if( p_end - (p_block->p_buffer + i_body) > BLOCK_WASTE_SIZE )
+ {
+ block_t *p_rea = block_Alloc( requested );
+ if( p_rea )
+ {
+ BlockMetaCopy( p_rea, p_block );
+ p_rea->p_buffer += i_prebody;
+ p_rea->i_buffer -= i_prebody;
+ memcpy( p_rea->p_buffer, p_block->p_buffer, p_block->i_buffer );
+ block_Release( p_block );
+ p_block = p_rea;
+ }
+ }