From a723958b135d15dee82ebcedfcdd9aa0ba0228e0 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Mon, 23 Mar 2026 15:14:25 +0600 Subject: [PATCH 1/4] Changed config get macro --- source/libublsettings-config.c | 2 ++ source/libublsettings.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index b2bdfcb..17477b8 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1503,10 +1503,12 @@ int yon_config_update_by_args(char *key, ...){ config_str keys = NULL; yon_char_parsed_add_or_create_if_exists(keys,&size,key); va_list args; + yon_config_clear_by_key(key); va_start(args,key); char *cur_key = NULL; while((cur_key = va_arg(args,char*))){ yon_char_parsed_add_or_create_if_exists(keys,&size,cur_key); + yon_config_clear_by_key(cur_key); } int params_size=0; diff --git a/source/libublsettings.h b/source/libublsettings.h index 13b1cd5..1ee0474 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -102,7 +102,7 @@ typedef char** config_str; * * Значение парамерта конфигурации или NULL. */ -#define config(key) yon_config_get_by_key(key) +#define config(key) yon_config_get(key) /** * @brief Allocates or reallocates memory. -- 2.35.1 From dd3a9e47a26eaaaf4fbb8f456da5e098259bd7c4 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Mon, 23 Mar 2026 18:10:55 +0600 Subject: [PATCH 2/4] Fixed yon_config_get_by_key() function --- source/libublsettings-config.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 17477b8..576bf9e 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1274,8 +1274,8 @@ config_str yon_config_get_save_parameters_by_list(int *size, config_str paramete removed[position]=string; } - } else { - char *string = yon_char_unite("remove"," ",yon_config_parameter_wrap(parameters[i]),NULL); + } else if (temp){ + char *string = yon_char_unite("remove"," ",yon_config_parameter_to_string((yon_config_parameter*)temp,1),NULL); yon_char_parsed_add_or_create_if_exists(removed,&removed_size,string); } } -- 2.35.1 From a2a8e3a3985f48b624710dfc0b94b1c1cd4aa867 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 24 Mar 2026 13:53:22 +0600 Subject: [PATCH 3/4] Changed return type of simple saving functions to return commands and output --- source/libublsettings-config.c | 40 +++++++++++++++++++++++++++++----- source/libublsettings.h | 4 ++-- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 576bf9e..41bc3ad 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1423,7 +1423,7 @@ char *yon_config_save_simple(YON_CONFIG_TYPE target, char *path){ return NULL; } -int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *path){ +char *yon_config_save_list_simple(config_str parameters_keys, size_t size, char *path){ if (yon_char_is_empty(path)) return 0; check_config{ int parameters_size=0; @@ -1431,14 +1431,26 @@ int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *p if (parameters&¶meters_size){ char *command_parameters = yon_char_parsed_to_string(parameters,parameters_size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target ",path," ", command_parameters,NULL); - return !!system(command); + FILE *file = popen(command,"r"); + if (file){ + int file_size=0; + config_str file_output = yon_config_load_file(file,&file_size); + if (file_output){ + char *final_string = yon_char_parsed_to_string(file_output,file_size,""); + if (!yon_char_is_empty(final_string)){ + return final_string; + } + } + fclose(file); + } + } } - return 0; + return NULL; } -int yon_config_save_args_simple(char *path, ...){ +char *yon_config_save_args_simple(char *path, ...){ if (yon_char_is_empty(path)) return 0; check_config{ va_list args; @@ -1455,10 +1467,26 @@ int yon_config_save_args_simple(char *path, ...){ if (parameters&¶meters_size){ char *command_parameters = yon_char_parsed_to_string(parameters,parameters_size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target ",path," ", command_parameters,NULL); - return !!system(command); + FILE *file = popen(command,"r"); + if (file){ + int file_size=0; + config_str file_output = yon_config_load_file(file,&file_size); + if (file_output){ + char *output_string = yon_char_parsed_to_string(file_output,file_size,""); + yon_char_parsed_free(file_output,file_size); + char *final_string = yon_char_unite(command,"\n",output_string,NULL); + free(output_string); + if (!yon_char_is_empty(final_string)){ + return final_string; + } + } else { + yon_char_parsed_free(file_output,file_size); + } + fclose(file); + } } } - return 0; + return NULL; } int yon_config_update_by_key(char *key){ diff --git a/source/libublsettings.h b/source/libublsettings.h index 1ee0474..57c1830 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -1527,14 +1527,14 @@ char *yon_config_save_simple(YON_CONFIG_TYPE target, char *path); /// @param size size of parameter keys list. /// @param path Path to configuration .ini. /// @return TRUE if successful, FALSE otherwise. -int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *path); +char *yon_config_save_list_simple(config_str parameters_keys, size_t size, char *path); /// @brief Save list of parameters into configuration. /// @param path Path to configuration .ini. /// @param ... A NULL-terminated list of parameter keys. /// @return TRUE if successful, FALSE otherwise. -int yon_config_save_args_simple(char *path, ...); +char *yon_config_save_args_simple(char *path, ...); /// @brief Update parameter's value from configuration. /// @param key Parameter's key. -- 2.35.1 From 6626b371f60efe882079cdfe12b4fc70ad85dc78 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 24 Mar 2026 16:27:47 +0600 Subject: [PATCH 4/4] Changed config paramter clear to config parameter removal for config update functions --- source/libublsettings-config.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 41bc3ad..2095876 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1497,6 +1497,7 @@ int yon_config_update_by_key(char *key){ if (current->data) free(current->data); current->data = NULL; int size=0; + yon_config_remove_by_key(key); char *command = yon_config_parameter_get_load_command(key); config_str new_param = yon_config_load(command,&size); if (size&&!yon_char_is_empty(new_param[0])&&strcmp(new_param[0],"(null)\n")){ @@ -1514,6 +1515,7 @@ int yon_config_update_by_list(config_str keys, size_t size){ if (!size||!keys) return 0; check_config{ int params_size=0; + yon_config_remove_by_list(keys,size); config_str parameters = yon_config_get_load_parameters_by_list(¶ms_size,keys,size); if (params_size&¶meters){ char *path = yon_config_command_get_path(config_last_load_command); @@ -1531,12 +1533,12 @@ int yon_config_update_by_args(char *key, ...){ config_str keys = NULL; yon_char_parsed_add_or_create_if_exists(keys,&size,key); va_list args; - yon_config_clear_by_key(key); + yon_config_remove_by_key(key); va_start(args,key); char *cur_key = NULL; while((cur_key = va_arg(args,char*))){ yon_char_parsed_add_or_create_if_exists(keys,&size,cur_key); - yon_config_clear_by_key(cur_key); + yon_config_remove_by_key(cur_key); } int params_size=0; -- 2.35.1