Merge commit '3feb3d6ce4be0a09a9f8f13d613bed25b523b6e7'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 17 Sep 2013 09:05:19 +0000 (11:05 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 17 Sep 2013 09:06:26 +0000 (11:06 +0200)
* commit '3feb3d6ce4be0a09a9f8f13d613bed25b523b6e7':
  mem: Introduce av_reallocp

Conflicts:
doc/APIchanges
libavutil/mem.c
libavutil/mem.h
libavutil/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
doc/APIchanges
libavutil/mem.c
libavutil/mem.h
libavutil/version.h

diff --cc doc/APIchanges
@@@ -15,25 -13,9 +15,28 @@@ libavutil:     2012-10-2
  
  API changes, most recent first:
  
+ 2013-09-xx - xxxxxxx - lavu 52.13.0 - mem.h
+   Add av_reallocp.
 +2013-09-04 - 3e1f507 - lavc 55.31.101 - avcodec.h
 +  avcodec_close() argument can be NULL.
 +
 +2013-09-04 - 36cd017 - lavf 55.16.101 - avformat.h
 +  avformat_close_input() argument can be NULL and point on NULL.
 +
 +2013-08-29 - e31db62 - lavf 55.15.100 - avformat.h
 +  Add av_format_get_probe_score().
 +
 +2013-08-xx - xxxxxxx - lsws 2.5.100 -
 +  Add a sws_dither AVOption, allowing to set the dither algorithm used
 +
 +2013-08-xx - xxxxxxx - lavc 55.27.100 - vdpau.h
 +  Add a render2 alternative to the render callback function.
 +
 +2013-08-xx - xxxxxxx - lavc 55.26.100 - vdpau.h
 +  Add allocation function for AVVDPAUContext, allowing
 +  to extend it in the future without breaking ABI/API.
 +
  2013-08-xx - xxxxxxx - lavc 55.16.0 - avcodec.h
    Extend AVPacket API with av_packet_unref, av_packet_ref,
    av_packet_move_ref, av_packet_copy_props, av_packet_free_side_data.
diff --cc libavutil/mem.c
@@@ -165,21 -136,22 +165,37 @@@ 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;
 +}
 +
+ int av_reallocp(void *ptr, size_t size)
+ {
+     void **ptrptr = ptr;
+     void *ret;
+     ret = av_realloc(*ptrptr, size);
+     if (!ret) {
+         av_freep(ptr);
+         return AVERROR(ENOMEM);
+     }
+     *ptrptr = ret;
+     return 0;
+ }
  void *av_realloc_array(void *ptr, size_t nmemb, size_t size)
  {
      if (!size || nmemb >= INT_MAX / size)
diff --cc libavutil/mem.h
@@@ -119,15 -118,24 +119,34 @@@ void *av_realloc(void *ptr, size_t size
  
  /**
   * 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);
 +
 +/**
++ * Allocate or reallocate a block of memory.
+  * If *ptr is NULL and size > 0, allocate a new block. If
+  * size is zero, free the memory block pointed to by ptr.
+  * @param   ptr Pointer to a pointer to a memory block already allocated
+  *          with av_realloc(), or pointer to a pointer to NULL.
+  *          The pointer is updated on success, or freed on failure.
+  * @param   size Size in bytes for the memory block to be allocated or
+  *          reallocated
+  * @return  Zero on success, an AVERROR error code on failure.
+  * @warning Pointers originating from the av_malloc() family of functions must
+  *          not be passed to av_reallocp(). The former can be implemented using
+  *          memalign() (or other functions), and there is no guarantee that
+  *          pointers from such functions can be passed to realloc() at all.
+  *          The situation is undefined according to POSIX and may crash with
+  *          some libc implementations.
+  */
+ int av_reallocp(void *ptr, size_t size);
+ /**
   * Allocate or reallocate an array.
   * If ptr is NULL and nmemb > 0, allocate a new block. If
   * nmemb is zero, free the memory block pointed to by ptr.
@@@ -74,9 -36,9 +74,9 @@@
   * @{
   */
  
 -#define LIBAVUTIL_VERSION_MAJOR 52
 -#define LIBAVUTIL_VERSION_MINOR 15
 -#define LIBAVUTIL_VERSION_MICRO  0
 +#define LIBAVUTIL_VERSION_MAJOR  52
- #define LIBAVUTIL_VERSION_MINOR  43
++#define LIBAVUTIL_VERSION_MINOR  44
 +#define LIBAVUTIL_VERSION_MICRO 100
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \