From ecd0d5118a9d83ff0bf7ee1d9e12e916ab7d31ab Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 11 Aug 2025 16:34:06 +0600 Subject: [PATCH 1/8] Test loading change --- source/libublsettings-char.c | 2 +- source/libublsettings-config.c | 230 +++++++++++++++++++++++++-------- source/libublsettings.h | 4 +- 3 files changed, 182 insertions(+), 54 deletions(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index 261a0cc..b01dc71 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -297,7 +297,7 @@ char *yon_char_replace_single(char *source, char *find, char *replace){ return NULL; } -char **yon_char_parse(char *parameters, int *size, char *divider){ +char **yon_char_parse(const char *parameters, int *size, char *divider){ *size=0; if (parameters){ char **string=NULL; diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index b74a365..28b8329 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -261,7 +261,7 @@ char *yon_config_replace_parameter(char *command, char *parameter, int place){ if (!yon_char_is_empty(command)); int size=0; config_str parsed = yon_char_parse(command,&size," "); - int firstparameter = yon_config_command_get_section_pos(parsed,size)+1; + int firstparameter = yon_config_command_get_section_pos(command)+1; if (firstparameter+place-1){ if (parsed_size>get_place+2){ for (int j=get_place+2;j0){ + int final_size; + config_str final = NULL; + yon_char_parsed_add_or_create_if_exists(final,&final_size,command[0]); + for (int i=1;i-1){ + char *cur_string = ""; + for (int j=pos;j0){ + char *final_command = yon_char_parsed_to_string(final,final_size," -- get "); + yon_char_parsed_free(final,final_size); + return final_command; + } + } + return NULL; +} + +config_str yon_config_command_get_parameters(const char *command, int *size){ + (*size)=0; + if (yon_char_is_empty(command)) return NULL; + + int parsed_size; + config_str parsed = yon_char_parse(command,&parsed_size,""); + int pos = yon_config_command_get_section_pos(command); + if (pos>-1){ + for (int i=0;i0){ + (*size)=parsed_size; + return parsed; + } + } + return NULL; +} + +int yon_config_command_check_parameter(const char *command,const char *parameter){ + int size; + config_str parameters = yon_config_command_get_parameters(command,&size); + for (int i=0;i0){ - for (int j=0;j0){ +// for (int j=0;j Date: Mon, 11 Aug 2025 18:01:55 +0600 Subject: [PATCH 2/8] Added -ea argument checking --- source/libublsettings-config.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 28b8329..158205b 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -438,9 +438,12 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ yon_char_remove_last_symbol(parameters[i],'\n'); char *value = yon_char_new(parameters[i]); char *parameter = yon_char_divide_search(value,"=",-1); - char *section = yon_char_divide_search(parameter," ",-1); - free(yon_char_divide(section,yon_char_find_last(section,'/'))); - yon_char_remove_last_symbol(section,']'); + char *section = NULL; + if (strstr(parameter," -ea ")){ + section = yon_char_divide_search(parameter," ",-1); + free(yon_char_divide(section,yon_char_find_last(section,'/'))); + yon_char_remove_last_symbol(section,']'); + } yon_char_remove_brackets(value); char *get_parameter = yon_char_unite("[",section,"]"," ", value,NULL); -- 2.35.1 From 62b2d617040b714b262efc586260a565de2cdccb Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 12 Aug 2025 14:09:37 +0600 Subject: [PATCH 3/8] Loading fixes --- source/libublsettings-char.c | 2 +- source/libublsettings-config.c | 13 ++++++++----- source/libublsettings.h | 2 ++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index b01dc71..744bf7f 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -299,7 +299,7 @@ char *yon_char_replace_single(char *source, char *find, char *replace){ char **yon_char_parse(const char *parameters, int *size, char *divider){ *size=0; - if (parameters){ + if (parameters&&!yon_char_is_empty(divider)){ char **string=NULL; char *paramline=yon_char_new(parameters); char *param = strstr(paramline,divider); diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 158205b..7c1f167 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -332,10 +332,10 @@ config_str yon_config_command_get_parameters(const char *command, int *size){ if (yon_char_is_empty(command)) return NULL; int parsed_size; - config_str parsed = yon_char_parse(command,&parsed_size,""); + config_str parsed = yon_char_parse(command,&parsed_size," "); int pos = yon_config_command_get_section_pos(command); if (pos>-1){ - for (int i=0;i0){ @@ -439,7 +439,7 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ char *value = yon_char_new(parameters[i]); char *parameter = yon_char_divide_search(value,"=",-1); char *section = NULL; - if (strstr(parameter," -ea ")){ + if (strstr(final_command," -ea ")){ section = yon_char_divide_search(parameter," ",-1); free(yon_char_divide(section,yon_char_find_last(section,'/'))); yon_char_remove_last_symbol(section,']'); @@ -1261,8 +1261,11 @@ char *yon_config_parameter_prepare_command(char *command, char *path, char *sect } if (parameter){ if (size>=get_pos+2){ - free(parsed[get_pos+2]); - parsed[get_pos+2] = yon_char_new(parameter); + config_str temp = yon_char_parsed_copy(parsed,get_pos+1); + yon_char_parsed_free(parsed,size); + parsed = temp; + size=get_pos+1; + yon_char_parsed_add_or_create_if_exists(parsed,&size,parameter); } } char *final = yon_char_parsed_to_string(parsed,size," "); diff --git a/source/libublsettings.h b/source/libublsettings.h index df37060..0237c9f 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -868,6 +868,8 @@ char *yon_config_command_get_section(const char *command); int yon_config_command_get_path_pos(config_str parsed, int size); char *yon_config_command_get_path(const char *command); +config_str yon_config_command_get_parameters(const char *command, int *size); + char *yon_config_get_last_command(); void yon_config_set_last_command(char *command); -- 2.35.1 From f9ce7123b69449d017799de5c90834169c46938e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 14 Aug 2025 15:50:40 +0600 Subject: [PATCH 4/8] Loading minor rework; added new function --- source/libublsettings-config.c | 25 ++++++++++++++++++++++++- source/libublsettings.h | 8 +++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 7c1f167..1ebe8dc 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -439,7 +439,7 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ char *value = yon_char_new(parameters[i]); char *parameter = yon_char_divide_search(value,"=",-1); char *section = NULL; - if (strstr(final_command," -ea ")){ + if (final_command[0]=='['){ section = yon_char_divide_search(parameter," ",-1); free(yon_char_divide(section,yon_char_find_last(section,'/'))); yon_char_remove_last_symbol(section,']'); @@ -458,6 +458,7 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ } if ((cur_ignore&&value)||(!cur_ignore)){ yon_config_register(parameter,get_command,value); + // yon_config_set_section(parameter,section); } if (config_type==YON_CONFIG_DEFAULT){ @@ -854,6 +855,28 @@ int yon_config_default_remove(char *key){ return 0; } +/// @brief Получение всех параметров отдельного раздела конфигурации +/// @param section_name Название раздела конфигурации +/// @param size размер финального массива +/// @return массив строк со всеми параметрами для запрашиваемого раздела +config_str yon_config_get_parameters_for_section(const char *section_name, int *size){ + (*size)=0; + check_config{ + int parameters_size; + config_str parameters = NULL; + + yon_config_parameter *parameter; + for_dictionaries(parameter,__yon__config__strings){ + if (!strcmp(parameter->section,section_name)){ + yon_char_parsed_add_or_create_if_exists(parameters,¶meters_size,parameter->key); + } + } + (*size)=parameters_size; + return parameters; + } + return NULL; +} + enum YON_CONFIG_SAVED_TYPE yon_config_register(char *key,char *config_load, char *data){ if (yon_char_is_empty(key)||yon_char_is_empty(config_load)) return YON_CONFIG_SAVED_ERROR; diff --git a/source/libublsettings.h b/source/libublsettings.h index 0237c9f..15f40fc 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -774,7 +774,7 @@ config_str yon_dir_get_by_mask(char *path, char *mask, int *size); #define ubconfig_set_command_full(target, section, data) yon_char_unite("ubconfig ",!yon_char_is_empty(target)?"--target ":"",!yon_char_is_empty(target)?target:""," set ",section," ",data,NULL) #define ubconfig_load_command(target) yon_char_unite("ubconfig --source ",target," get ",NULL) #define ubconfig_load_command_full(target, data) yon_char_unite("ubconfig --source ",target," get ",data,NULL) -#define ubconfig_remove_command_full(target, section, data) yon_char_unite("ubconfig ",!yon_char_is_empty(target)?"--target ":"",!yon_char_is_empty(target)?target:""," remove ",section," ",data,NULL) +#define ubconfig_remove_command_full(target, section, data) yon_char_unite("ubconfig ",!yon_char_is_empty(target)?"--target ":"",!yon_char_is_empty(target)?target:""," remove ",!yon_char_is_empty(section)?section:"",!yon_char_is_empty(section)?" ":"",data,NULL) /** * Типы конфигураций ubconfig-а @@ -944,6 +944,12 @@ void *yon_config_get_by_key(char *key); char *yon_config_get_section_for_key(char *key); +config_str yon_config_get_parameters_for_section(const char *section_name, int *size); + +config_str yon_config_get_parameters_for_all_sections(int *size); +config_str yon_config_get_parameters_for_all_sections_saved(int *size); +config_str yon_config_get_parameters_for_all_sections_removed(int *size); + /**yon_config_get_all_by_key(char *data) * [EN] * -- 2.35.1 From 6de6c52c3319675ef5fbaf21727066390270dadd Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 14 Aug 2025 16:14:54 +0600 Subject: [PATCH 5/8] Added new char_parsed function --- source/libublsettings-char.c | 8 ++++++++ source/libublsettings.h | 1 + 2 files changed, 9 insertions(+) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index 744bf7f..e9d6c50 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -450,6 +450,14 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string){ return new_parsed; } +config_str yon_char_parsed_prepend(config_str parsed, int *size, char *string){ + config_str new_parsed=realloc(parsed,(*size+1)*sizeof(char*)); + memcpy(&new_parsed[1],new_parsed,(*size)*sizeof(char*)); + new_parsed[0]=yon_char_new(string); + (*size)++; + return new_parsed; +} + void yon_char_parsed_append_strings (config_str array, int size, char *prepend){ if (array && size>0 && !yon_char_is_empty(prepend)){ for (int i=0;i Date: Mon, 18 Aug 2025 10:52:16 +0600 Subject: [PATCH 6/8] Support for old ublinux commands format --- source/libublsettings-config.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 1ebe8dc..1fffcd3 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -429,17 +429,19 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ } char *final_command = yon_config_command_get_full(commands,commands_size); - + if (yon_char_is_empty(final_command)) return 0; int parameters_size; - printf("%s\n",final_command); config_str parameters = yon_config_load(final_command,¶meters_size); + char *section = NULL; + if (!strstr(final_command," -ea ")){ + section = yon_config_command_get_section(final_command); + } for (int i=0;i Date: Thu, 21 Aug 2025 13:37:28 +0600 Subject: [PATCH 7/8] Fixed last command settings --- source/libublsettings-config.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 1fffcd3..28ffaf6 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -429,6 +429,7 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ } char *final_command = yon_config_command_get_full(commands,commands_size); + yon_config_set_last_command(final_command); if (yon_char_is_empty(final_command)) return 0; int parameters_size; config_str parameters = yon_config_load(final_command,¶meters_size); @@ -1465,8 +1466,10 @@ int yon_config_change_key(char *target, char *key){ char *yon_config_parameter_get_key(char *parameter_string){ char *key = yon_char_new(parameter_string); - if (strstr(key,"[")&&strstr(key,"]")){ - free(yon_char_divide_search(key,"[",-1)); + char *cut_text = strstr(key,"["); + if (cut_text&&strstr(key,"]")){ + memcpy(key,key+(strlen(key)-strlen(cut_text))+1,strlen(cut_text)); + // free(yon_char_divide_search(key,"[",-1)); yon_char_remove_last_symbol(key,']'); } return key; -- 2.35.1 From 9216c8586346162b1ab10047a3f4e271cc114263 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 21 Aug 2025 17:59:50 +0600 Subject: [PATCH 8/8] Fixed config set command --- source/libublsettings-config.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 28ffaf6..112f508 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -817,7 +817,8 @@ config_str yon_config_get_all_keys_no_ignored(int *size){ int yon_config_set(char *key, void *data){ check_config{ yon_config_parameter *dict = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__strings,key); - dict->data=data; + if (!dict) return 0; + dict->data=yon_char_new(data); dict->flag1=1; if (yon_dictionary_get(&__yon_config_ignored, dict->key)){ __yon_config_ignored = yon_dictionary_rip(__yon_config_ignored); -- 2.35.1