On Wed, Nov 19, 2014 at 02:25:48AM +0100, Lukasz Marek wrote: > On 19.11.2014 01:13, Michael Niedermayer wrote: > >On Wed, Nov 19, 2014 at 12:30:53AM +0100, Lukasz Marek wrote: > >>On 18.11.2014 20:47, Michael Niedermayer wrote: > >>>>>how will that work without any way to identify the version or format? > >>>>> > >>>>>also a serialization stream thats self containd seems much nicer to > >>>>>handle as theres no need to keep track of the exact version (if we > >>>>>end up having more than 1) the used seperators, ... > >>>>> > >>>>>also consider 2 libs or apps to interface with each other using this > >>>>>serialization format, if one requires a change to the format how can > >>>>>the other know without a version in it, it would need to know it by > >>>>>external means. it can surely be done but it doesnt feel like > >>>>>something desirable > >>>>> > >>>> > >>>>I can do one of followings: > >>>>- I can move this function to ffserver_config.c, where it is needed as > >>>>presented here (to create simple pairs separated with comas) > >>>>- Rename function to av_dict_get_string or something so it wont get > >>>>confused with your idea of serialize function. I still think both version > >>>>has own usecases > >>> > >>>iam fine with either of these > >> > >>OK, renamed. I swapped separators order to be the same as > >>parse_string's ones. added tests for corner cases where potential > >>escape chars are separators. > > > >[...] > > > >>+{ > >>+ AVDictionary *dict = NULL; > >>+ char *buffer = NULL; > >>+ > >>+ printf("Testing av_dict_get_string() and av_dict_parse_string()"); > >>+ av_dict_get_string(dict, &buffer, '=', ','); > >>+ printf("%s\n", buffer); > >>+ av_freep(&buffer); > >>+ av_dict_set(&dict, "aaa", "aaa", 0); > >>+ av_dict_set(&dict, "b,b", "bbb", 0); > >>+ av_dict_set(&dict, "c=c", "ccc", 0); > >>+ av_dict_set(&dict, "ddd", "d,d", 0); > >>+ av_dict_set(&dict, "eee", "e=e", 0); > >>+ av_dict_set(&dict, "f,f", "f=f", 0); > >>+ av_dict_set(&dict, "g=g", "g,g", 0); > >>+ test_separators(dict, ',', '='); > >>+ av_dict_free(&dict); > >>+ av_dict_set(&dict, "aaa", "aaa", 0); > > > >i tried this instead > >av_dict_set(&dict, "a\\,=\'\"aa", "a\\,=\'\"aa", 0); > > > >and it doesnt seem to work > > obviously av_get_token is broken, i'm not going to fix it soon, so > consider patchset dropped unless no one does or wahtever
i dont think we need \ as a seperator, supporting that case would only add work I suggest this: diff --git a/libavutil/dict.c b/libavutil/dict.c index e071ec9..fb984ea 100644 --- a/libavutil/dict.c +++ b/libavutil/dict.c @@ -220,6 +220,9 @@ int av_dict_get_string(const AVDictionary *m, char **buffer, if (!buffer || pairs_sep == '\0' || key_val_sep == '\0' || pairs_sep == key_val_sep) return AVERROR(EINVAL); + if (pairs_sep == '\\' || key_val_sep == '\\') + return AVERROR(EINVAL); + if (!av_dict_count(m)) { *buffer = av_strdup(""); return *buffer ? 0 : AVERROR(ENOMEM); [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Everything should be made as simple as possible, but not simpler. -- Albert Einstein
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel