[FFmpeg-cvslog] r19742 - trunk/libavutil/internal.h

Benoit Fouet benoit.fouet
Tue Sep 1 17:07:38 CEST 2009


On 2009-08-30 00:44, M?ns Rullg?rd wrote:
> ramiro <subversion at mplayerhq.hu> writes:
> 
>> Author: ramiro
>> Date: Sun Aug 30 00:38:48 2009
>> New Revision: 19742
>>
>> Log:
>> Add CHECKED_ALLOC macro.
>> It works the same as CHECKED_ALLOCZ except that it does not zero the allocated
>> memory.
>>
>> Modified:
>>    trunk/libavutil/internal.h
>>
>> Modified: trunk/libavutil/internal.h
>> ==============================================================================
>> --- trunk/libavutil/internal.h	Sat Aug 29 23:04:18 2009	(r19741)
>> +++ trunk/libavutil/internal.h	Sun Aug 30 00:38:48 2009	(r19742)
>> @@ -249,6 +249,15 @@ if((y)<(x)){\
>>  #define perror please_use_av_log_instead_of_perror
>>  #endif
>>
>> +#define CHECKED_ALLOC(p, size)\
>> +{\
>> +    p= av_malloc(size);\
>> +    if(p==NULL && (size)!=0){\
>> +        av_log(NULL, AV_LOG_ERROR, "Cannot allocate memory.");\
>> +        goto fail;\
>> +    }\
>> +}
> 
> Looks like I missed some discussions...  This should be wrapped in
> do { } while(0) so if (foo) CHECKED_ALLOC(); else blah; can work.  It
> would also be nice if the label to goto were an argument.  As it is,
> you can only have one target per function that uses the macro.
> Finally, it could do with some beautifying, but that's secondary.
> 

it would be cool to be able to pass an avctx too:

#define CHECKED_ALLOC(ctx, p, size, label)                      \
do {                                                            \
    p = malloc(size);                                           \
    if (!p && (size)){                                          \
        av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n"); \
        goto label;                                             \
    }                                                           \
} while (0)

Ben



More information about the ffmpeg-cvslog mailing list