mem: introduce av_malloc_array and av_mallocz_array
Both function ease allocating large arrays implementing the overflow check inside it.
This commit is contained in:
		
							parent
							
								
									2d497c141d
								
							
						
					
					
						commit
						f3e5e6f05b
					
				@ -13,6 +13,9 @@ libavutil:     2011-04-18
 | 
			
		||||
 | 
			
		||||
API changes, most recent first:
 | 
			
		||||
 | 
			
		||||
2012-07-10 - xxxxxxx - lavu 51.37.0
 | 
			
		||||
  Add av_malloc_array() and av_mallocz_array()
 | 
			
		||||
 | 
			
		||||
2012-06-22 - xxxxxxx - lavu 51.34.0
 | 
			
		||||
  Add av_usleep()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -63,9 +63,9 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if AV_GCC_VERSION_AT_LEAST(4,3)
 | 
			
		||||
    #define av_alloc_size(n) __attribute__((alloc_size(n)))
 | 
			
		||||
    #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__)))
 | 
			
		||||
#else
 | 
			
		||||
    #define av_alloc_size(n)
 | 
			
		||||
    #define av_alloc_size(...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -78,6 +78,22 @@
 | 
			
		||||
 */
 | 
			
		||||
void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper function to allocate a block of size * nmemb bytes with
 | 
			
		||||
 * using av_malloc()
 | 
			
		||||
 * @param nmemb Number of elements
 | 
			
		||||
 * @param size Size of the single element
 | 
			
		||||
 * @return Pointer to the allocated block, NULL if the block cannot
 | 
			
		||||
 * be allocated.
 | 
			
		||||
 * @see av_malloc()
 | 
			
		||||
 */
 | 
			
		||||
av_alloc_size(1,2) static inline void *av_malloc_array(size_t nmemb, size_t size)
 | 
			
		||||
{
 | 
			
		||||
    if (size <= 0 || nmemb >= INT_MAX / size)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    return av_malloc(nmemb * size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Allocate or reallocate a block of memory.
 | 
			
		||||
 * If ptr is NULL and size > 0, allocate a new block. If
 | 
			
		||||
@ -112,6 +128,23 @@ void av_free(void *ptr);
 | 
			
		||||
 */
 | 
			
		||||
void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper function to allocate a block of size * nmemb bytes with
 | 
			
		||||
 * using av_mallocz()
 | 
			
		||||
 * @param nmemb Number of elements
 | 
			
		||||
 * @param size Size of the single element
 | 
			
		||||
 * @return Pointer to the allocated block, NULL if the block cannot
 | 
			
		||||
 * be allocated.
 | 
			
		||||
 * @see av_mallocz()
 | 
			
		||||
 * @see av_malloc_array()
 | 
			
		||||
 */
 | 
			
		||||
av_alloc_size(1,2) static inline void *av_mallocz_array(size_t nmemb, size_t size)
 | 
			
		||||
{
 | 
			
		||||
    if (size <= 0 || nmemb >= INT_MAX / size)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    return av_mallocz(nmemb * size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Duplicate the string s.
 | 
			
		||||
 * @param s string to be duplicated
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define LIBAVUTIL_VERSION_MAJOR 51
 | 
			
		||||
#define LIBAVUTIL_VERSION_MINOR 36
 | 
			
		||||
#define LIBAVUTIL_VERSION_MINOR 37
 | 
			
		||||
#define LIBAVUTIL_VERSION_MICRO  0
 | 
			
		||||
 | 
			
		||||
#define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user