From a66176a1d93e758fd57bc83f1f08cf554fd285e5 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 17 Sep 2025 18:21:54 +0600 Subject: [PATCH] Added new function --- source/libublsettings-char.c | 14 ++++++++++++++ source/libublsettings-config.c | 23 ++++++++++++++++++++--- source/libublsettings.h | 4 +++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index ffabdb3..d4c17c4 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -682,6 +682,20 @@ config_str yon_char_wrap_to_length(char *target, unsigned int length, int *size) return ret_target; } +char *yon_char_get_element(char *target, unsigned int position, char *divider){ + if (!yon_char_is_empty(target)&&strstr(target,divider)){ + int size; + char *final = NULL; + config_str parsed = yon_char_parse(target,&size,divider); + if (size>=position){ + final = yon_char_new(parsed[position]); + } + yon_char_parsed_free(parsed,size); + return final; + } + return NULL; +} + char *yon_char_wrap_to_length_str(char *target, unsigned int length){ int size=0; if (!yon_char_is_empty(target)&&strlen(target)>length&&strstr(target," ")){ diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 20e4929..40129f3 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1122,7 +1122,7 @@ config_str yon_config_get_save_parameters_by_list(int *size, config_str paramete } } if (!found){ - if(removed){ + if(removed&&temp){ int position = yon_char_parsed_find_element(removed,removed_size,((yon_config_parameter*)temp)->section); if (position>=0){ char *string = yon_char_unite((removed)[position]," ",yon_config_parameter_to_string((yon_config_parameter*)temp,0),NULL); @@ -1148,10 +1148,10 @@ config_str yon_config_get_save_parameters_by_list(int *size, config_str paramete return final; } -config_str yon_config_get_save_parameters_by_key(int *size, char *parameter,...){ +config_str yon_config_get_save_parameters_by_key(int *size,...){ va_list list; (*size)=0; - va_start(list,parameter); + va_start(list,size); int removed_size; config_str removed = NULL; int updated_size; @@ -1172,12 +1172,14 @@ config_str yon_config_get_save_parameters_by_key(int *size, char *parameter,...) current = &removed; current_size = &removed_size; break; + case 0: case 1: action = "set"; current = &updated; current_size = &updated_size; break; } + if (!current) continue; int position = yon_char_parsed_find_element(*current,*current_size,((yon_config_parameter*)temp)->section); if (position>=0){ char *string = yon_char_unite((*current)[position]," ",yon_config_parameter_to_string((yon_config_parameter*)temp,0),NULL); @@ -1196,6 +1198,21 @@ config_str yon_config_get_save_parameters_by_key(int *size, char *parameter,...) return final; } +config_str yon_config_find_keys(char *target, int *size){ + (*size)=0; + check_config{ + config_str final = NULL; + yon_config_parameter *cur = NULL; + for_dictionaries(cur,__yon__config__strings){ + if (strstr(cur->key,target)){ + yon_char_parsed_add_or_create_if_exists(final,size,cur->key); + } + } + return final; + } + return NULL; +} + config_str yon_config_get_save_parameters(int *size){ check_config{} else return NULL; (*size)=0; diff --git a/source/libublsettings.h b/source/libublsettings.h index a57acb0..f3033ff 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -815,7 +815,7 @@ config_str yon_config_get_load_parameters_by_list(int *size, config_str paramete config_str yon_config_get_save_parameters_by_list(int *size, config_str parameters, int params_size); -config_str yon_config_get_save_parameters_by_key(int *size, char *parameter,...); +config_str yon_config_get_save_parameters_by_key(int *size, ...); config_str yon_config_get_save_parameters(int *size); @@ -863,6 +863,8 @@ int yon_config_parse_parameter(char *parameter,char **key, char **value); int yon_char_remove_brackets(char *string); +char *yon_char_get_element(char *target, unsigned int position, char *divider); + int yon_config_command_get_section_pos(const char *); char *yon_config_command_get_section(const char *command);