From 1bdaa5f00531263572d614ad7b72c4e538ccb236 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 25 Jun 2025 18:07:22 +0000 Subject: [PATCH 1/2] Added functions --- source/libublsettings-char.c | 33 +++++++++++++++++++++-- source/libublsettings-config.c | 48 ++++++++++++++++------------------ source/libublsettings.h | 24 ++++++++++++++++- 3 files changed, 77 insertions(+), 28 deletions(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index c089815..1c20a48 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -35,6 +35,33 @@ char *yon_char_append_c(const char *source, char append) return NULL; } +char *yon_char_append_element(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; + config_str parsed = yon_char_parse(source,&size,divider); + if (yon_char_parsed_check_exist(parsed,size,target)==-1){ + yon_char_parsed_add_or_create_if_exists(parsed,&size,target); + return yon_char_parsed_to_string(parsed,size,divider); + } + } + return yon_char_new(source); +} + +char *yon_char_remove_element(char *source,char *target, char *divider){ + if (!yon_char_is_empty(source)&&!yon_char_is_empty(target)&&!yon_char_is_empty(divider)){ + if (yon_char_is_empty(source)) return NULL; + int size; + config_str parsed = yon_char_parse(source,&size,divider); + int pos = yon_char_parsed_check_exist(parsed,size,target); + if (pos!=-1){ + parsed = yon_char_parsed_rip(parsed,&size,pos); + return yon_char_parsed_to_string(parsed,size,divider); + } + } + return yon_char_new(source); +} + char *yon_char_new(const char *chr) { if (chr){ @@ -574,8 +601,10 @@ char *yon_char_parsed_to_string_full(config_str parsed, int size, char *divider_ if (parsed && size>0){ char *final_string = ""; char *temp; - for (int i=0;idata,&size,divider); - config_str final = NULL; - for(int i=0;i0) final_string = yon_char_parsed_to_string(parsed,size,divider); - else { - final_string = malloc(sizeof(char)*1); - final_string[0]='\0'; - } - if (final_string){ - free(dict->data); - dict->data=final_string; - return 1; - } else { - yon_config_remove_by_key(key); - return 1; - } + char *temp = yon_char_remove_element((char*)dict->data,delete_target,divider); + if (!yon_char_is_empty((char*)dict->data)) free(dict->data); + dict->data = temp; + return 1; } } else return 0; @@ -515,7 +511,9 @@ int yon_config_append_element(char *key, char *append, char *divider){ int found = 0; yon_config_parameter *dict = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__strings,key); if (dict){ - yon_char_unite((char*)dict->data,divider,append,NULL); + char *temp = yon_char_append_element((char*)dict->data,append,divider); + if (!yon_char_is_empty((char*)dict->data)) free(dict->data); + dict->data = temp; return 1; } diff --git a/source/libublsettings.h b/source/libublsettings.h index 80ee838..e639adb 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -311,12 +311,24 @@ int yon_char_find_last(char *source, char find); /**[EN] * - * creates new char string by combining two char strings. + * Creates new char string by combining two char strings. + * [RU] + * Создаёт новую строку, состоящую из двух входящих. */ char *yon_char_append(const char *source, const char *append); +/**[EN] + * + * Creates new char string by combining two char strings. + * [RU] + * Создаёт новую строку, состоящую из строки [source] + * с добавлением символа [append] в конец. + */ char *yon_char_append_c(const char *source, char append); +char *yon_char_append_element(char *source,char *target, char *divider); +char *yon_char_remove_element(char *source,char *target, char *divider); + /**[EN] * * creates new char string by copying another char. @@ -894,6 +906,15 @@ int yon_config_compare_ignore_get(char *key); */ int yon_config_remove_by_key(char *key); +/**yon_config_remove_by_key(char *key) + * [EN] + * + * [RU] + * Очищает параметр конфига по ключу [key]. + * Параметр удаляется как при полной очистке всего конфига. +*/ +int yon_config_clear_by_key(const char *key); + /**yon_config_remove_element(char *key, char *deleted) * [EN] * @@ -901,6 +922,7 @@ int yon_config_remove_by_key(char *key); * Удаляет элемент [deleted] из массива параметров с ключом [key] */ int yon_config_remove_element(char *key, char *delete_target, char *divider); +int yon_config_append_element(char *key, char *append, char *divider); int yon_config_set_status(char *key, int status); -- 2.35.1 From 186df29bf3a7d3dafdd0bcbfec6cc6d3285b184a Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 3 Jul 2025 17:58:06 +0600 Subject: [PATCH 2/2] Freeze fix --- source/libublsettings-char.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-char.c b/source/libublsettings-char.c index 1c20a48..bf87c91 100644 --- a/source/libublsettings-char.c +++ b/source/libublsettings-char.c @@ -695,11 +695,13 @@ char *yon_char_wrap_to_length_str(char *target, unsigned int length){ config_str final = NULL; char *current = yon_char_new(target); for (;strlen(current)>length;){ - int last = yon_char_find_last_symbol_before_length(target,' ',length); + int last = yon_char_find_last_symbol_before_length(current,' ',length); if (last>-1){ char *parsed = yon_char_divide(current,last); yon_char_parsed_add_or_create_if_exists(final,&size,parsed); free(parsed); + }else { + break; } } -- 2.35.1