[FFmpeg-devel] [PATCH 07/11] lavu/dict: add av_dict_serialize

Michael Niedermayer michaelni at gmx.at
Mon Nov 17 14:01:01 CET 2014


On Mon, Nov 17, 2014 at 02:46:54AM +0100, Lukasz Marek wrote:
> TODO: bump minor, update doc/APIchanges
> 
> Signed-off-by: Lukasz Marek <lukasz.m.luki2 at gmail.com>
> ---
>  libavutil/dict.c | 27 +++++++++++++++++++++++++++
>  libavutil/dict.h | 16 ++++++++++++++++
>  2 files changed, 43 insertions(+)
> 
> diff --git a/libavutil/dict.c b/libavutil/dict.c
> index 475e906..a41d61e 100644
> --- a/libavutil/dict.c
> +++ b/libavutil/dict.c
> @@ -24,6 +24,7 @@
>  #include "dict.h"
>  #include "internal.h"
>  #include "mem.h"
> +#include "bprint.h"
>  
>  struct AVDictionary {
>      int count;

> @@ -207,3 +208,29 @@ void av_dict_copy(AVDictionary **dst, FF_CONST_AVUTIL53 AVDictionary *src, int f
>      while ((t = av_dict_get(src, "", t, AV_DICT_IGNORE_SUFFIX)))
>          av_dict_set(dst, t->key, t->value, flags);
>  }
> +
> +int av_dict_serialize(const AVDictionary *m, char **buffer,
> +                      const char pairs_sep, const char key_val_sep)
> +{
> +    AVDictionaryEntry *t = NULL;
> +    AVBPrint bprint;
> +    int cnt = 0;
> +
> +    if (!m || !buffer)
> +        return AVERROR(EINVAL);

It should be also possible to serialize an empty dictionary

the serialization string should also contain a serialization format
identifer/version otherwise future maintaince could become hard
this identifer should specify the used separator chars


> +
> +    if (!av_dict_count(m)) {
> +        *buffer = av_strdup("");
> +        return *buffer ? 0 : AVERROR(ENOMEM);
> +    }
> +
> +    av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED);
> +
> +    while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) {
> +        if (cnt++)
> +            av_bprint_append_data(&bprint, &pairs_sep, 1);
> +        av_bprintf(&bprint, "%s%c%s", t->key, key_val_sep, t->value);
> +    }

this would fail for a string containing the seperator chars
and a string containing all 255 chars could not be serialized at
all.
Also it would lack a check for the occurance of the seperator chars
in the source


[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When the tyrant has disposed of foreign enemies by conquest or treaty, and
there is nothing more to fear from them, then he is always stirring up
some war or other, in order that the people may require a leader. -- Plato
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141117/83ed3d46/attachment.asc>


More information about the ffmpeg-devel mailing list