diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index bb5ce45..3acbd5f 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -132,6 +132,26 @@ int yon_char_check_element(char *target, char *element, char *divider){ return found>-1; } +int yon_char_check_elements(char *target, char *element, char *divider){ + if (yon_char_is_empty(target)||yon_char_is_empty(element)||yon_char_is_empty(divider)) return 0; + int size; + int element_size; + config_str parsed = yon_char_parse(target,&size,divider); + config_str parsed_element = yon_char_parse(element,&element_size,divider); + for (int i=0;idata,append,divider); - if (!yon_char_is_empty((char*)dict->data)) free(dict->data); - dict->data = temp; - dict->flag1 = 1; - yon_config_remove_ignore(key); - return 1; + if (!yon_char_check_elements((char*)dict->data,append,divider)){ + char *temp = yon_char_append_element((char*)dict->data,append,divider); + if (!yon_char_is_empty((char*)dict->data)) free(dict->data); + dict->data = temp; + dict->flag1 = 1; + yon_config_remove_ignore(key); + return 1; + } } - } else return 0; + } + return 0; } int yon_config_force_append_element(char *key, char *append, char *divider){ @@ -1052,6 +1055,7 @@ config_str yon_config_load_file(FILE *file, int *str_len) { } char *yon_config_parameter_wrap(char *parameter_key){ + if (!strstr(parameter_key,"[")) return yon_char_new(parameter_key); char *cur = NULL; int size; config_str parsed = yon_char_parse(parameter_key,&size,"["); @@ -1061,6 +1065,7 @@ char *yon_config_parameter_wrap(char *parameter_key){ char *half_wrapped = yon_char_parsed_to_string_full(parsed,size,"["); yon_char_parsed_free(parsed,size); parsed = yon_char_parse(half_wrapped,&size,"]"); + if (size>1) temp = yon_char_append_c(parsed[size-2],'\''); free(parsed[size-2]); parsed[size-2] = temp; @@ -1075,7 +1080,7 @@ char *yon_config_parameter_to_string(yon_config_parameter *parameter, int insert if (parameter){ char *param_string = NULL; char *parameter_wrapped = yon_config_parameter_wrap(parameter->key); - param_string = yon_char_unite(insert_section?parameter->section:"",insert_section?" ":"", parameter_wrapped,parameter->flag1==-1?NULL:"","=\'",parameter->data,"\'",NULL); + param_string = yon_char_unite(insert_section?parameter->section:"",insert_section?" ":"", parameter_wrapped,parameter->flag1==-1?NULL:"","=\'",yon_char_return_if_exist(parameter->data,""),"\'",NULL); return param_string; } return NULL; diff --git a/source/libublsettings.h b/source/libublsettings.h index 573c5b5..6df4e36 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -695,8 +695,19 @@ char *yon_char_unite(const char *source, ...); char *yon_cut(char *source, int size, int startpos); -int yon_char_check_element(char *target, char *element, char *divider); +/// @brief Check if elements string contains string +/// @param source Source element string for search +/// @param element The checked string +/// @param separator String, separating elements within parameter's value +/// @return +int yon_char_check_element(char *source, char *element, char *separator); +/// @brief Check if elements string contains another elements string +/// @param source_string Source element string for search +/// @param target_string Target element string, which compares with source string +/// @param separator String, separating elements within parameter's value +/// @return +int yon_char_check_elements(char *source_string, char *target_string, char *separator); /// @brief Swap 2 substrings. /// @param source Source string