Browse Source

Introduce av_realloc_f.

av_realloc_f helps avoiding memory-leaks in typical uses of realloc.

Signed-off-by: Nicolas George <nicolas.george@normalesup.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n0.9
Nicolas George Michael Niedermayer 15 years ago
parent
commit
5cd754bca2
2 changed files with 25 additions and 0 deletions
  1. +15
    -0
      libavutil/mem.c
  2. +10
    -0
      libavutil/mem.h

+ 15
- 0
libavutil/mem.c View File

@@ -143,6 +143,21 @@ void *av_realloc(void *ptr, size_t size)
#endif
}

void *av_realloc_f(void *ptr, size_t nelem, size_t elsize)
{
size_t size;
void *r;

if (av_size_mult(elsize, nelem, &size)) {
av_free(ptr);
return NULL;
}
r = av_realloc(ptr, size);
if (!r && size)
av_free(ptr);
return r;
}

void av_free(void *ptr)
{
#if CONFIG_MEMALIGN_HACK


+ 10
- 0
libavutil/mem.h View File

@@ -87,6 +87,16 @@ void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
*/
void *av_realloc(void *ptr, size_t size) av_alloc_size(2);

/**
* Allocate or reallocate a block of memory.
* This function does the same thing as av_realloc, except:
* - It takes two arguments and checks the result of the multiplication for
* integer overflow.
* - It frees the input block in case of failure, thus avoiding the memory
* leak with the classic "buf = realloc(buf); if (!buf) return -1;".
*/
void *av_realloc_f(void *ptr, size_t nelem, size_t elsize);

/**
* Free a memory block which has been allocated with av_malloc(z)() or
* av_realloc().


Loading…
Cancel
Save