@ -139,21 +139,22 @@ void *av_realloc(void *ptr, size_t size)
int av_reallocp ( void * ptr , size_t size )
int av_reallocp ( void * ptr , size_t size )
{
{
void * * ptrptr = ptr ;
void * val ;
void * ret ;
if ( ! size ) {
if ( ! size ) {
av_freep ( ptr ) ;
av_freep ( ptr ) ;
return 0 ;
return 0 ;
}
}
ret = av_realloc ( * ptrptr , size ) ;
if ( ! ret ) {
memcpy ( & val , ptr , sizeof ( val ) ) ;
val = av_realloc ( val , size ) ;
if ( ! val ) {
av_freep ( ptr ) ;
av_freep ( ptr ) ;
return AVERROR ( ENOMEM ) ;
return AVERROR ( ENOMEM ) ;
}
}
* ptrptr = ret ;
memcpy ( ptr , & val , sizeof ( val ) ) ;
return 0 ;
return 0 ;
}
}
@ -166,20 +167,23 @@ void *av_realloc_array(void *ptr, size_t nmemb, size_t size)
int av_reallocp_array ( void * ptr , size_t nmemb , size_t size )
int av_reallocp_array ( void * ptr , size_t nmemb , size_t size )
{
{
void * * ptrptr = ptr ;
void * val ;
void * ret ;
if ( ! size | | nmemb > = INT_MAX / size )
if ( ! size | | nmemb > = INT_MAX / size )
return AVERROR ( ENOMEM ) ;
return AVERROR ( ENOMEM ) ;
if ( ! nmemb ) {
if ( ! nmemb ) {
av_freep ( ptr ) ;
av_freep ( ptr ) ;
return 0 ;
return 0 ;
}
}
ret = av_realloc ( * ptrptr , nmemb * size ) ;
if ( ! ret ) {
memcpy ( & val , ptr , sizeof ( val ) ) ;
val = av_realloc ( val , nmemb * size ) ;
if ( ! val ) {
av_freep ( ptr ) ;
av_freep ( ptr ) ;
return AVERROR ( ENOMEM ) ;
return AVERROR ( ENOMEM ) ;
}
}
* ptrptr = ret ;
memcpy ( ptr , & val , sizeof ( val ) ) ;
return 0 ;
return 0 ;
}
}
@ -197,9 +201,11 @@ void av_free(void *ptr)
void av_freep ( void * arg )
void av_freep ( void * arg )
{
{
void * * ptr = ( void * * ) arg ;
void * val ;
av_free ( * ptr ) ;
* ptr = NULL ;
memcpy ( & val , arg , sizeof ( val ) ) ;
memcpy ( arg , & ( void * ) { NULL } , sizeof ( val ) ) ;
av_free ( val ) ;
}
}
void * av_mallocz ( size_t size )
void * av_mallocz ( size_t size )