Merge pull request 'master' (#81) from YanTheKaller/libublsettings:master into master

Reviewed-on: #81
pull/87/head v1.76
Dmitry Razumov 2 months ago
commit 5a5bc576c7

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -132,6 +132,26 @@ int yon_char_check_element(char *target, char *element, char *divider){
return found>-1; 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;i<element_size;i++){
int found = yon_char_parsed_check_exist(parsed,size,element);
if (found<0){
yon_char_parsed_free(parsed,size);
yon_char_parsed_free(parsed_element,element_size);
return 0;
}
}
yon_char_parsed_free(parsed,size);
yon_char_parsed_free(parsed_element,element_size);
return 0;
}
char *yon_char_swap_element(const char *source, const char *a, const char *b, const char *divider){ char *yon_char_swap_element(const char *source, const char *a, const char *b, const char *divider){
if (yon_char_is_empty(source)||yon_char_is_empty(a)||yon_char_is_empty(b)) return 0; if (yon_char_is_empty(source)||yon_char_is_empty(a)||yon_char_is_empty(b)) return 0;
int size; int size;

@ -630,6 +630,7 @@ int yon_config_append_element(char *key, char *append, char *divider){
int found = 0; int found = 0;
yon_config_parameter *dict = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__strings,key); yon_config_parameter *dict = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__strings,key);
if (dict){ if (dict){
if (!yon_char_check_elements((char*)dict->data,append,divider)){
char *temp = yon_char_append_element((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); if (!yon_char_is_empty((char*)dict->data)) free(dict->data);
dict->data = temp; dict->data = temp;
@ -637,8 +638,10 @@ int yon_config_append_element(char *key, char *append, char *divider){
yon_config_remove_ignore(key); yon_config_remove_ignore(key);
return 1; return 1;
} }
}
} else return 0; }
return 0;
} }
int yon_config_force_append_element(char *key, char *append, char *divider){ int yon_config_force_append_element(char *key, char *append, char *divider){
@ -743,11 +746,26 @@ void *yon_config_get_all_by_key(char *key, int *size){
dictionary *dict = NULL; dictionary *dict = NULL;
for_dictionaries(dict, (dictionary*)__yon__config__strings){ for_dictionaries(dict, (dictionary*)__yon__config__strings){
if (strstr(dict->key,key)&&((yon_config_parameter*)dict)->flag1!=-1) { if (strstr(dict->key,key)&&((yon_config_parameter*)dict)->flag1!=-1) {
char *key_quoted = yon_config_parameter_set_quotes(dict->key); char *ret_string = yon_char_unite(dict->key,"=",(char*)dict->data,NULL);
char *ret_string = yon_char_unite(key_quoted,"=",(char*)dict->data,NULL); if (ret_data) ret_data = yon_char_parsed_append(ret_data,size,ret_string);
else ret_data = yon_char_parsed_new(size,ret_string,NULL);
}
}
return ret_data;
}
return NULL;
}
void *yon_config_get_all_keys_by_key(char *key, int *size){
(*size)=0;
check_config{
config_str ret_data=NULL;
dictionary *dict = NULL;
for_dictionaries(dict, (dictionary*)__yon__config__strings){
if (strstr(dict->key,key)&&((yon_config_parameter*)dict)->flag1!=-1) {
char *ret_string = yon_char_new(dict->key);
if (ret_data) ret_data = yon_char_parsed_append(ret_data,size,ret_string); if (ret_data) ret_data = yon_char_parsed_append(ret_data,size,ret_string);
else ret_data = yon_char_parsed_new(size,ret_string,NULL); else ret_data = yon_char_parsed_new(size,ret_string,NULL);
free(key_quoted);
} }
} }
return ret_data; return ret_data;
@ -1052,6 +1070,7 @@ config_str yon_config_load_file(FILE *file, int *str_len) {
} }
char *yon_config_parameter_wrap(char *parameter_key){ char *yon_config_parameter_wrap(char *parameter_key){
if (!strstr(parameter_key,"[")) return yon_char_new(parameter_key);
char *cur = NULL; char *cur = NULL;
int size; int size;
config_str parsed = yon_char_parse(parameter_key,&size,"["); config_str parsed = yon_char_parse(parameter_key,&size,"[");
@ -1061,6 +1080,7 @@ char *yon_config_parameter_wrap(char *parameter_key){
char *half_wrapped = yon_char_parsed_to_string_full(parsed,size,"["); char *half_wrapped = yon_char_parsed_to_string_full(parsed,size,"[");
yon_char_parsed_free(parsed,size); yon_char_parsed_free(parsed,size);
parsed = yon_char_parse(half_wrapped,&size,"]"); parsed = yon_char_parse(half_wrapped,&size,"]");
if (size>1)
temp = yon_char_append_c(parsed[size-2],'\''); temp = yon_char_append_c(parsed[size-2],'\'');
free(parsed[size-2]); free(parsed[size-2]);
parsed[size-2] = temp; parsed[size-2] = temp;
@ -1075,7 +1095,7 @@ char *yon_config_parameter_to_string(yon_config_parameter *parameter, int insert
if (parameter){ if (parameter){
char *param_string = NULL; char *param_string = NULL;
char *parameter_wrapped = yon_config_parameter_wrap(parameter->key); 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 param_string;
} }
return NULL; return NULL;

@ -695,8 +695,19 @@ char *yon_char_unite(const char *source, ...);
char *yon_cut(char *source, int size, int startpos); 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. /// @brief Swap 2 substrings.
/// @param source Source string /// @param source Source string
@ -1403,6 +1414,12 @@ config_str yon_config_get_parameters_for_section(const char *section_name, int *
/// @return A newly allocated list of all found parameters or NULL /// @return A newly allocated list of all found parameters or NULL
void *yon_config_get_all_by_key(char *key, int *size); void *yon_config_get_all_by_key(char *key, int *size);
/// @brief Find all parameter keys from the configuration by string
/// @param key the search string
/// @param size Size of the returned parameter list
/// @return A newly allocated list of all found parameter keys or NULL
void *yon_config_get_all_keys_by_key(char *key, int *size);
/// @brief Find all parameters from the configuration by string, excluding ignored parameters /// @brief Find all parameters from the configuration by string, excluding ignored parameters
/// @param key the search string /// @param key the search string
/// @param size Size of the returned parameter list /// @param size Size of the returned parameter list

Loading…
Cancel
Save