diff --git a/libavutil/mem.c b/libavutil/mem.c index 687ec55875..cfa4cbd57a 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -229,6 +229,17 @@ char *av_strdup(const char *s) return ptr; } +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; +} + void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem) { /* see similar ffmpeg.c:grow_array() */ diff --git a/libavutil/mem.h b/libavutil/mem.h index ced9453869..02395b792b 100644 --- a/libavutil/mem.h +++ b/libavutil/mem.h @@ -179,6 +179,14 @@ av_alloc_size(1, 2) static inline void *av_mallocz_array(size_t nmemb, size_t si */ char *av_strdup(const char *s) 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.