You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	dict: add av_dict_parse_string()
Can be used to set multiple key/value pairs from a string. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
		
				
					committed by
					
						 Luca Barbato
						Luca Barbato
					
				
			
			
				
	
			
			
			
						parent
						
							5ea5ffc9ce
						
					
				
				
					commit
					38c1466ca4
				
			| @@ -13,6 +13,10 @@ libavutil:     2012-10-22 | ||||
|  | ||||
| API changes, most recent first: | ||||
|  | ||||
| 2013-xx-xx - xxxxxxx - lavu 52.7.0 - dict.h | ||||
|   Add av_dict_parse_string() to set multiple key/value pairs at once from a | ||||
|   string. | ||||
|  | ||||
| 2013-01-xx - xxxxxxx - lavu 52.6.0 - avstring.h | ||||
|   Add av_strnstr() | ||||
|  | ||||
|   | ||||
| @@ -110,6 +110,53 @@ int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int parse_key_value_pair(AVDictionary **pm, const char **buf, | ||||
|                                 const char *key_val_sep, const char *pairs_sep, | ||||
|                                 int flags) | ||||
| { | ||||
|     char *key = av_get_token(buf, key_val_sep); | ||||
|     char *val = NULL; | ||||
|     int ret; | ||||
|  | ||||
|     if (key && *key && strspn(*buf, key_val_sep)) { | ||||
|         (*buf)++; | ||||
|         val = av_get_token(buf, pairs_sep); | ||||
|     } | ||||
|  | ||||
|     if (key && *key && val && *val) | ||||
|         ret = av_dict_set(pm, key, val, flags); | ||||
|     else | ||||
|         ret = AVERROR(EINVAL); | ||||
|  | ||||
|     av_freep(&key); | ||||
|     av_freep(&val); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| int av_dict_parse_string(AVDictionary **pm, const char *str, | ||||
|                          const char *key_val_sep, const char *pairs_sep, | ||||
|                          int flags) | ||||
| { | ||||
|     int ret; | ||||
|  | ||||
|     if (!str) | ||||
|         return 0; | ||||
|  | ||||
|     /* ignore STRDUP flags */ | ||||
|     flags &= ~(AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); | ||||
|  | ||||
|     while (*str) { | ||||
|         if ((ret = parse_key_value_pair(pm, &str, key_val_sep, pairs_sep, flags)) < 0) | ||||
|             return ret; | ||||
|  | ||||
|         if (*str) | ||||
|             str++; | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| void av_dict_free(AVDictionary **pm) | ||||
| { | ||||
|     AVDictionary *m = *pm; | ||||
|   | ||||
| @@ -106,6 +106,23 @@ int av_dict_count(const AVDictionary *m); | ||||
|  */ | ||||
| int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); | ||||
|  | ||||
| /** | ||||
|  * Parse the key/value pairs list and add to a dictionary. | ||||
|  * | ||||
|  * @param key_val_sep  a 0-terminated list of characters used to separate | ||||
|  *                     key from value | ||||
|  * @param pairs_sep    a 0-terminated list of characters used to separate | ||||
|  *                     two pairs from each other | ||||
|  * @param flags        flags to use when adding to dictionary. | ||||
|  *                     AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL | ||||
|  *                     are ignored since the key/value tokens will always | ||||
|  *                     be duplicated. | ||||
|  * @return             0 on success, negative AVERROR code on failure | ||||
|  */ | ||||
| int av_dict_parse_string(AVDictionary **pm, const char *str, | ||||
|                          const char *key_val_sep, const char *pairs_sep, | ||||
|                          int flags); | ||||
|  | ||||
| /** | ||||
|  * Copy entries from one AVDictionary struct into another. | ||||
|  * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, | ||||
|   | ||||
| @@ -37,7 +37,7 @@ | ||||
|  */ | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_MAJOR 52 | ||||
| #define LIBAVUTIL_VERSION_MINOR  6 | ||||
| #define LIBAVUTIL_VERSION_MINOR  7 | ||||
| #define LIBAVUTIL_VERSION_MICRO  0 | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user