From 7783c3e0d3e106f91780051d0ccaa9a2035dc113 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 17 Mar 2026 17:52:19 +0600 Subject: [PATCH 1/9] Added new config and char functions --- source/libublsettings-char.c | 18 ++++++++++++++++++ source/libublsettings-config.c | 19 +++++++++++++++++++ source/libublsettings.h | 14 ++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index 0521521..b8a6b62 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -48,6 +48,24 @@ char *yon_char_append_element(char *source,char *target, char *divider){ return yon_char_new(source); } +char *yon_char_append_elements(char *source,char *target, char *divider){ + if (!yon_char_is_empty(target)&&!yon_char_is_empty(divider)){ + if (yon_char_is_empty(source)) return yon_char_new(target); + int size=0; + int target_size=0; + config_str parsed = yon_char_parse(source,&size,divider); + config_str target_parsed = yon_char_parse(target,&target_size,divider); + for (int i=0;idata,append,divider)){ + char *temp = yon_char_append_elements((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; + } + } + + } + return 0; +} + int yon_config_force_append_element(char *key, char *append, char *divider){ check_config{ int found = 0; diff --git a/source/libublsettings.h b/source/libublsettings.h index 7dce9c4..ca1dbd1 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -646,6 +646,13 @@ char *yon_char_append_c(const char *source, char append); */ char *yon_char_append_element(char *source,char *target, char *divider); +/// @brief Append string of elements with another string of elements +/// @param source sSource string of elements. +/// @param target Appended string of elements. +/// @param separator String, separating elements within parameter's value +/// @return A newly allocated string of elements +char *yon_char_append_elements(char *source,char *target, char *separator); + char *yon_char_force_append_element(char *source,char *target, char *divider); /** * @brief Remove substring from string. @@ -1375,6 +1382,13 @@ int yon_config_remove_elements(char *key, char *delete_target, char *separator); /// @return 1 if element was successfully added, 0 otherwise int yon_config_append_element(char *key, char *append, char *separator); +/// @brief Append registered parameter value string of elements with another string of elements +/// @param key parameter key +/// @param append string to append +/// @param separator string, separating elements within parameter's value +/// @return 1 if element was successfully added, 0 otherwise +int yon_config_append_elements(char *key, char *append, char *divider); + /// @brief Append parameter value string event if appended string already exists in parameter value or empty /// @param key parameter key /// @param append string to append From 56ef66b1f5147fe25a9da15fa0d211ea0186bece Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 18 Mar 2026 09:40:04 +0600 Subject: [PATCH 2/9] Fixed char_append_elements function --- source/libublsettings-char.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index b8a6b62..a5db03d 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -57,7 +57,7 @@ char *yon_char_append_elements(char *source,char *target, char *divider){ config_str target_parsed = yon_char_parse(target,&target_size,divider); for (int i=0;i Date: Wed, 18 Mar 2026 15:24:12 +0600 Subject: [PATCH 3/9] Test fix for char_check_elements function --- source/libublsettings-char.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index a5db03d..55e231e 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -189,7 +189,7 @@ int yon_char_check_elements(char *target, char *element, char *divider){ } yon_char_parsed_free(parsed,size); yon_char_parsed_free(parsed_element,element_size); - return 0; + return 1; } char *yon_char_swap_element(const char *source, const char *a, const char *b, const char *divider){ From 427bf1a542e8af53e0942dc69c425b6fe37099fc Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 18 Mar 2026 17:40:31 +0600 Subject: [PATCH 4/9] Added new functions; Added new function descripyions --- source/libublsettings-config.c | 37 ++++++++++++++++++++++++++++++++++ source/libublsettings.h | 37 ++++++++++++++++++++++------------ 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 9a13425..30a6337 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -595,6 +595,43 @@ int yon_config_remove_by_key(char *key){ return 0; } +int yon_config_remove_by_list(config_str keys, size_t size){ + int result = 0; + check_config{ + for (size_t i = 0;ikey); + ((yon_config_parameter*)dict)->flag1=-1; + dict->data=""; + result=1; + } + } + } + return result; +} + +int yon_config_remove_by_args(char *key, ...){ + int result = 0; + check_config{ + va_list args; + va_start(args,key); + char *cur_key = key; + while (!yon_char_is_empty(cur_key)){ + dictionary *dict = yon_dictionary_get((dictionary**)&__yon__config__strings,cur_key); + if (dict){ + yon_config_remove_ignore(dict->key); + ((yon_config_parameter*)dict)->flag1=-1; + dict->data=""; + result=1; + } + cur_key = va_arg(args,char*); + } + va_end(args); + } + return result; +} + int yon_config_clear_by_key(const char *key){ check_config{ dictionary *dict = yon_dictionary_get((dictionary**)&__yon__config__strings,(char*)key); diff --git a/source/libublsettings.h b/source/libublsettings.h index ca1dbd1..99062ca 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -1340,25 +1340,36 @@ int yon_config_load_register_no_cleaning(YON_CONFIG_TYPE config_type,char *secti [[ deprecated ( "Use yon_config_load_config instead" ) ]] int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *parameter, ...); +/// @brief Set configuration parameter ignore status. Determines whether the parameter will be compared with the value from the configuration or the old value will be ignored when saving. +/// @param key Key of parameter. +/// @param status New status void yon_config_compare_ignore_set(char *key, int status); +/// @brief Get configuration parameter ignore status +/// @param key Key of parameter. +/// @return TRUE if parameter is ignored, FALSE otherwise int yon_config_compare_ignore_get(char *key); -/**yon_config_remove_by_key(char *key) - * [EN] - * - * [RU] - * Удаляет параметр конфига по ключу [key] -*/ +/// @brief Mark parameter from configuration for remove. It will be removed from target configuration at save. +/// @param key Key of parameter. +/// @return TRUE if parameter was successfully removed, FALSE otherwise. int yon_config_remove_by_key(char *key); -/**yon_config_remove_by_key(char *key) - * [EN] - * - * [RU] - * Очищает параметр конфига по ключу [key]. - * Параметр удаляется как при полной очистке всего конфига. -*/ +/// @brief Mark list of parameters from configuration for remove. It will be removed from target configuration at save. +/// @param keys string array of parameters removing parameter keys. +/// @param size size of string array. +/// @return TRUE if parameter was successfully removed, FALSE otherwise. +int yon_config_remove_by_list(config_str keys, size_t size); + +/// @brief Mark list of parameters from configuration for remove. It will be removed from target configuration at save. +/// @param key First of parameter keys to remove. +/// @param ... A null-terminated list of remaining parameter keys. +/// @return TRUE if parameter was successfully removed, FALSE otherwise. +int yon_config_remove_by_args(char *key, ...); + +/// @brief Clear a configuration parameter. Remove it completely, as if it had never been added - a parameter removed this way will not be compared when saving. +/// @param key Key of parameter. +/// @return TRUE if parameter was successfully removed, FALSE otherwise. int yon_config_clear_by_key(const char *key); /// @brief Remove substring from registered parameter value string From fd4d701367463630067cf9bd89ae6374787d21fb Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 19 Mar 2026 11:26:16 +0600 Subject: [PATCH 5/9] Added new function; yon_dir_get_contents marked as deprecated --- source/libublsettings-file.c | 11 ++++ source/libublsettings-locale.c | 2 +- source/libublsettings.h | 92 +++++++++++++--------------------- 3 files changed, 47 insertions(+), 58 deletions(-) diff --git a/source/libublsettings-file.c b/source/libublsettings-file.c index 35e8b5e..5043a18 100644 --- a/source/libublsettings-file.c +++ b/source/libublsettings-file.c @@ -140,6 +140,17 @@ config_str yon_file_ls(char *path, int *size){ return NULL; } +char *yon_file_get_parent(const char *path){ + if (yon_char_is_empty(path)|| !strstr(path,"/")) return NULL; + char *parent_path = NULL; + int size; + config_str parsed = yon_char_parse(path,&size,"/"); + free(parsed[size-1]); + parsed[size-1] = NULL; + parent_path = yon_char_parsed_to_string_full(parsed,size,"/"); + return parent_path; +} + int yon_file_is_directory(const char *path) { struct stat path_stat; diff --git a/source/libublsettings-locale.c b/source/libublsettings-locale.c index cddf1ec..67c0fd5 100644 --- a/source/libublsettings-locale.c +++ b/source/libublsettings-locale.c @@ -68,7 +68,7 @@ void yon_locale_set(struct yon_locale *target,char *locale_name){ void yon_locale_init(){ int size; - config_str locales_list = yon_dir_get_contents(locales_path,&size); + config_str locales_list = yon_file_ls(locales_path,&size); locales_hash_table = yon_hash_new(size*2,yon_str_hash); for (int i=0;i Date: Thu, 19 Mar 2026 11:39:26 +0600 Subject: [PATCH 6/9] Replaced deprecated function --- source/libublsettings.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libublsettings.c b/source/libublsettings.c index 6289ad3..539ae78 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -128,7 +128,7 @@ config_str yon_dir_get_by_mask(char *path, char *mask, int *size){ lpart = yon_char_divide_search(rpart,"*",-1); config_str files = NULL; int found_size; - config_str found_files = yon_dir_get_contents(path,&found_size); + config_str found_files = yon_file_ls(path,&found_size); if(found_size>0){ int found = 1; int rfound = 0; From e73cd375e861bfae4ecf0549aeae48df08c658b0 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 19 Mar 2026 18:35:42 +0600 Subject: [PATCH 7/9] Added new functions --- source/libublsettings-config.c | 38 ++++++++++++++++++++++++++++++++++ source/libublsettings.h | 16 ++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 30a6337..17e00b6 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1408,6 +1408,44 @@ 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){ + if (yon_char_is_empty(path)) return 0; + check_config{ + int parameters_size=0; + config_str parameters = yon_config_get_save_parameters_by_list(¶meters_size,parameters_keys,size); + 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); + } + } + return 0; +} + + +int yon_config_save_args_simple(char *path, ...){ + if (yon_char_is_empty(path)) return 0; + check_config{ + va_list args; + va_start(args,path); + int size = 0; + config_str params = NULL; + char *cur = NULL; + while ((cur = va_arg(args,char*))){ + yon_char_parsed_add_or_create_if_exists(params,&size,cur); + } + int parameters_size=0; + config_str parameters = yon_config_get_save_parameters_by_list(¶meters_size,params,size); + yon_char_parsed_free(params,size); + 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); + } + } + return 0; +} + char *yon_config_parameter_prepare_command(char *command, char *path, char *section, char *parameter){ if (!yon_char_is_empty(command)){ int size=0; diff --git a/source/libublsettings.h b/source/libublsettings.h index 0f8ebc5..7f94a1a 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -1168,8 +1168,10 @@ void yon_dir_remove(const char *path); /** yon_dir_get_contents(char *dir_path, int *size) * [EN] + * [DEPRECATED] * * [RU] + * [УСТАРЕЛО] * Проверяет существует ли папка [dir_path] и * возвращает список всех вложенных файлов и папок, * передавая в [size] длину списка. @@ -1520,6 +1522,20 @@ enum YON_CONFIG_SAVED_TYPE yon_config_register_default(char *key,char *config_lo /// @return char *yon_config_save_simple(YON_CONFIG_TYPE target, char *path); +/// @brief Save list of parameters into configuration. +/// @param parameters_keys List of parameter keys. +/// @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); + + +/// @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, ...); + /**int yon_config_force_save_registered(char *path, char *section) * [EN] * Force config to save at [path] config ignoring parameter save status. From 5948dfde61b0ff1b3bb3300b1ac15afce323de8b Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Fri, 20 Mar 2026 14:22:45 +0600 Subject: [PATCH 8/9] Added new functions; Fixes --- source/libublsettings-config.c | 90 +++++++++++++++++++++++++++++++--- source/libublsettings.h | 17 +++++++ 2 files changed, 100 insertions(+), 7 deletions(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 17e00b6..2cee21e 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -339,9 +339,20 @@ char *yon_config_command_get_full(config_str command, int command_size){ } if (final_size>0){ char *final_command = yon_char_parsed_to_string(final,final_size," -- get "); - char *temp = yon_char_replace(final_command,"ubconfig","ubconfig -ea"); - free(final_command); - final_command = temp; + int pos = yon_char_check_element(final_command,"ubconfig", " "); + if (pos&&yon_char_check_element(final_command,"-ea"," ")==0){ + int size=0; + config_str parsed = yon_char_parse(final_command,&size," "); + pos = yon_char_parsed_check_exist(parsed,size,"ubconfig"); + char *tmp = yon_char_unite(parsed[pos]," -ea",NULL); + free(parsed[pos]); + parsed[pos] = tmp; + free(final_command); + final_command = yon_char_parsed_to_string(parsed,size," "); + } + // char *temp = yon_char_replace(final_command,"ubconfig","ubconfig -ea"); + // free(final_command); + // final_command = temp; yon_char_parsed_free(final,final_size); return final_command; } @@ -1191,13 +1202,17 @@ config_str yon_config_get_load_parameters_by_list(int *size, config_str paramete if (!strcmp(temp->key,current_str)){ int position = yon_char_parsed_find_element(final,*size,((yon_config_parameter*)temp)->section); if (position>=0){ - char *string = yon_char_unite((final)[position]," ",current_str,NULL); + char *quoted = yon_config_parameter_set_quotes(current_str); + char *string = yon_char_unite((final)[position]," ",quoted,NULL); free((final)[position]); (final)[position]=string; + free(quoted); } else { - char *string = yon_char_unite(temp->section," ",current_str,NULL); + char *quoted = yon_config_parameter_set_quotes(current_str); + char *string = yon_char_unite(temp->section," ",quoted,NULL); yon_char_parsed_add_or_create_if_exists(final,size,string); + free(quoted); } } } @@ -1414,8 +1429,9 @@ int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *p int parameters_size=0; config_str parameters = yon_config_get_save_parameters_by_list(¶meters_size,parameters_keys,size); if (parameters&¶meters_size){ - char *command_parameters = yon_char_parsed_to_string(parameters,parameters_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); + printf("%s\n",command); return !!system(command); } } @@ -1438,7 +1454,7 @@ int yon_config_save_args_simple(char *path, ...){ config_str parameters = yon_config_get_save_parameters_by_list(¶meters_size,params,size); yon_char_parsed_free(params,size); if (parameters&¶meters_size){ - char *command_parameters = yon_char_parsed_to_string(parameters,parameters_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); } @@ -1446,6 +1462,66 @@ int yon_config_save_args_simple(char *path, ...){ return 0; } +int yon_config_update_by_key(char *key){ + if (yon_char_is_empty(key)) return 0; + check_config{ + dictionary *current = yon_dictionary_get((dictionary**)&__yon__config__strings,key); + if (!current) return 0; + if (current->data) free(current->data); + current->data = NULL; + int size=0; + 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")){ + yon_char_remove_last_symbol(new_param[0],'\n'); + current->data = yon_char_new(new_param[0]); + ((yon_config_parameter*)current)->flag1=0; + yon_config_set_status(key,0); + return 1; + } + } + return 0; +} + +int yon_config_update_by_list(config_str keys, size_t size){ + if (!size||!keys) return 0; + check_config{ + int params_size=0; + 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); + char *parameters_str = yon_char_parsed_to_string(parameters,params_size," "); + char *command = yon_char_unite(ubconfig_load_command(path), parameters_str, NULL); + yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); + } + } + return 0; +} + +int yon_config_update_by_args(char *key, ...){ + check_config{ + int size=0; + config_str keys = NULL; + yon_char_parsed_add_or_create_if_exists(keys,&size,key); + va_list args; + 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); + + } + int params_size=0; + 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); + char *parameters_str = yon_char_parsed_to_string(parameters,params_size," -- get "); + char *command = yon_char_unite(ubconfig_load_command(path), parameters_str, NULL); + yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); + } + } + return 0; +} + char *yon_config_parameter_prepare_command(char *command, char *path, char *section, char *parameter){ if (!yon_char_is_empty(command)){ int size=0; diff --git a/source/libublsettings.h b/source/libublsettings.h index 7f94a1a..13b1cd5 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -1536,6 +1536,23 @@ int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *p /// @return TRUE if successful, FALSE otherwise. int yon_config_save_args_simple(char *path, ...); +/// @brief Update parameter's value from configuration. +/// @param key Parameter's key. +/// @return TRUE if parameter successfully updated, FALSE if parameter doesn't registered in configuration +int yon_config_update_by_key(char *key); + +/// @brief Update parameter's value from configuration. +/// @param key Parameters key list. +/// @param size size of parameters keys list. +/// @return TRUE if parameter successfully updated, FALSE if parameter doesn't registered in configuration +int yon_config_update_by_list(config_str keys, size_t size); + +/// @brief Update parameters value from configuration. +/// @param key First parameter's key. +/// @param ... NULL-terminated list of parameter keys. +/// @return TRUE if parameter successfully updated, FALSE if parameter doesn't registered in configuration +int yon_config_update_by_args(char *key, ...); + /**int yon_config_force_save_registered(char *path, char *section) * [EN] * Force config to save at [path] config ignoring parameter save status. From 5815d0b251f25f70a5c620df03f991db18d03d15 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Fri, 20 Mar 2026 16:22:01 +0600 Subject: [PATCH 9/9] Removed print() --- source/libublsettings-config.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 2cee21e..b2bdfcb 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -1431,7 +1431,6 @@ 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); - printf("%s\n",command); return !!system(command); } }