[FFmpeg-devel] [PATCH v2 2/3] avformat/tee: use av_dict_pop

Stefano Sabatini stefasab at gmail.com
Sun Jul 2 11:47:30 EEST 2023


On date Sunday 2023-06-25 12:49:06 +0200, Marvin Scholz wrote:
> This is a well-defined way to "steal" the value of the dict entry.
> ---
>  libavformat/tee.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/libavformat/tee.c b/libavformat/tee.c
> index cb555f52fd..70f3f2eb29 100644
> --- a/libavformat/tee.c
> +++ b/libavformat/tee.c
> @@ -157,6 +157,7 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
>  {
>      int i, ret;
>      AVDictionary *options = NULL, *bsf_options = NULL;
> +    char *entry_val = NULL;
>      AVDictionaryEntry *entry;
>      char *filename;
>      char *format = NULL, *select = NULL, *on_fail = NULL;
> @@ -171,15 +172,15 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
>          return ret;
>  
>  #define CONSUME_OPTION(option, field, action) do {                      \
> -        if ((entry = av_dict_get(options, option, NULL, 0))) {          \
> -            field = entry->value;                                       \
> +        if ((!av_dict_pop(&options, option, NULL, &entry_val, 0))) {    \
> +            field = entry_val;                                          \
>              { action }                                                  \
> -            av_dict_set(&options, option, NULL, 0);                     \
> +            av_freep(&entry_val);                                       \
>          }                                                               \
>      } while (0)
>  #define STEAL_OPTION(option, field)                                     \
>      CONSUME_OPTION(option, field,                                       \
> -                   entry->value = NULL; /* prevent it from being freed */)
> +                   entry_val = NULL; /* prevent it from being freed */)
>  #define PROCESS_OPTION(option, field, function, on_error)               \
>      CONSUME_OPTION(option, field, if ((ret = function) < 0) { { on_error } goto end; })

LGTM.


More information about the ffmpeg-devel mailing list