[vlc-devel] commit: Fixed block_Realloc when block_t->p_buffer has changed. ( Laurent Aimar )
git version control
git at videolan.org
Tue Nov 18 20:21:55 CET 2008
vlc | branch: 0.9-bugfix | Laurent Aimar <fenrir at videolan.org> | Tue Nov 18 19:05:49 2008 +0100| [c652dde12766c312faacc10c243e164d50631d4e] | committer: Laurent Aimar
Fixed block_Realloc when block_t->p_buffer has changed.
(cherry picked from commit 4e54fc160224190187431e60a8a3b14d767b65ee)
Signed-off-by: Laurent Aimar <fenrir at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c652dde12766c312faacc10c243e164d50631d4e
---
src/misc/block.c | 22 +++++++++++-----------
1 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/misc/block.c b/src/misc/block.c
index f666de0..b05e5ff 100644
--- a/src/misc/block.c
+++ b/src/misc/block.c
@@ -169,21 +169,21 @@ block_t *block_Realloc( block_t *p_block, ssize_t i_prebody, size_t i_body )
return p_rea;
}
- /* We have a very large reserved footer now? Release some of it. */
- if ((p_sys->p_allocated_buffer + p_sys->i_allocated_buffer) -
- (p_block->p_buffer + p_block->i_buffer) > BLOCK_WASTE_SIZE)
+ /* We have a very large reserved footer now? Release some of it.
+ * XXX it may not keep the algniment of p_buffer */
+ 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;
- block_sys_t *newb = realloc (p_sys, sizeof (*p_sys) + news);
+ const ptrdiff_t i_prebody = p_block->p_buffer - p_sys->p_allocated_buffer;
+ 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->i_allocated_buffer = news;
+ p_sys = p_new;
+ p_sys->i_allocated_buffer = i_new;
p_block = &p_sys->self;
- p_block->p_buffer = p_sys->p_allocated_buffer + BLOCK_PADDING_SIZE
- + BLOCK_ALIGN
- - ((uintptr_t)p_sys->p_allocated_buffer % BLOCK_ALIGN);
+ p_block->p_buffer = &p_sys->p_allocated_buffer[i_prebody];
}
}
return p_block;
More information about the vlc-devel
mailing list