Merge commit '8ddc32629a6d6be77256694c9e322dde134609f3'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Aug 2014 22:29:06 +0000 (00:29 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Aug 2014 22:29:06 +0000 (00:29 +0200)
* commit '8ddc32629a6d6be77256694c9e322dde134609f3':
  mem: add av_strndup() for duplicating substrings

Conflicts:
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
Simple merge
diff --cc libavutil/mem.c
@@@ -267,61 -222,26 +267,81 @@@ char *av_strdup(const char *s
      return ptr;
  }
  
+ char *av_strndup(const char *s, size_t len)
+ {
+     char *ret = NULL, *end;
+     if (!s)
+         return NULL;
+     end = memchr(s, 0, len);
+     if (end)
+         len = end - s;
+     ret = av_realloc(NULL, len + 1);
+     if (!ret)
+         return NULL;
+     memcpy(ret, s, len);
+     ret[len] = 0;
+     return ret;
+ }
 +void *av_memdup(const void *p, size_t size)
 +{
 +    void *ptr = NULL;
 +    if (p) {
 +        ptr = av_malloc(size);
 +        if (ptr)
 +            memcpy(ptr, p, size);
 +    }
 +    return ptr;
 +}
 +
 +int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
 +{
 +    void **tab = *(void ***)tab_ptr;
 +
 +    AV_DYNARRAY_ADD(INT_MAX, sizeof(*tab), tab, *nb_ptr, {
 +        tab[*nb_ptr] = elem;
 +        *(void ***)tab_ptr = tab;
 +    }, {
 +        return AVERROR(ENOMEM);
 +    });
 +    return 0;
 +}
 +
 +void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem)
 +{
 +    void **tab = *(void ***)tab_ptr;
 +
 +    AV_DYNARRAY_ADD(INT_MAX, sizeof(*tab), tab, *nb_ptr, {
 +        tab[*nb_ptr] = elem;
 +        *(void ***)tab_ptr = tab;
 +    }, {
 +        *nb_ptr = 0;
 +        av_freep(tab_ptr);
 +    });
 +}
 +
 +void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size,
 +                       const uint8_t *elem_data)
 +{
 +    uint8_t *tab_elem_data = NULL;
 +
 +    AV_DYNARRAY_ADD(INT_MAX, elem_size, *tab_ptr, *nb_ptr, {
 +        tab_elem_data = (uint8_t *)*tab_ptr + (*nb_ptr) * elem_size;
 +        if (elem_data)
 +            memcpy(tab_elem_data, elem_data, elem_size);
 +        else if (CONFIG_MEMORY_POISONING)
 +            memset(tab_elem_data, FF_MEMORY_POISON, elem_size);
 +    }, {
 +        av_freep(tab_ptr);
 +        *nb_ptr = 0;
 +    });
 +    return tab_elem_data;
 +}
 +
  static void fill16(uint8_t *dst, int len)
  {
      uint32_t v = AV_RN16(dst - 2);
diff --cc libavutil/mem.h
@@@ -241,14 -218,16 +241,24 @@@ av_alloc_size(1, 2) static inline void 
  char *av_strdup(const char *s) av_malloc_attrib;
  
  /**
+  * Duplicate a substring of the string s.
+  * @param s string to be duplicated
+  * @param len the maximum length of the resulting string (not counting the
+  *            terminating byte).
+  * @return Pointer to a newly-allocated string containing a
+  * copy of s or NULL if the string cannot be allocated.
+  */
+ char *av_strndup(const char *s, size_t len) av_malloc_attrib;
+ /**
 + * Duplicate the buffer p.
 + * @param p buffer to be duplicated
 + * @return Pointer to a newly allocated buffer containing a
 + * copy of p or NULL if the buffer cannot be allocated.
 + */
 +void *av_memdup(const void *p, size_t size);
 +
 +/**
   * Free a memory block which has been allocated with av_malloc(z)() or
   * av_realloc() and set the pointer pointing to it to NULL.
   * @param ptr Pointer to the pointer to the memory block which should
@@@ -55,9 -53,9 +55,9 @@@
   * @{
   */
  
 -#define LIBAVUTIL_VERSION_MAJOR 54
 -#define LIBAVUTIL_VERSION_MINOR  3
 -#define LIBAVUTIL_VERSION_MICRO  0
 +#define LIBAVUTIL_VERSION_MAJOR  54
- #define LIBAVUTIL_VERSION_MINOR   2
++#define LIBAVUTIL_VERSION_MINOR   3
 +#define LIBAVUTIL_VERSION_MICRO 100
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \