From e74aa0bd72041f1ab87d6bde613835434eb342e6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 9 Jan 2024 14:10:41 +0600 Subject: [PATCH] Added new function, changed config function --- source/CMakeLists.txt | 2 - source/libublsettings.c | 84 +++++++++++++++++++++++++++++------------ source/libublsettings.h | 4 +- 3 files changed, 62 insertions(+), 28 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index e275a8f..5c48c66 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -9,8 +9,6 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ -fstack-clash-protection -fcf-protection") - - add_library(${PROJECT_NAME} SHARED libublsettings.c diff --git a/source/libublsettings.c b/source/libublsettings.c index 2cb4200..6bd7b6e 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -214,15 +214,17 @@ dictionary *yon_dictionary_new_with_data(char *key, void *data) } void *yon_dictionary_free_all(dictionary *dictionary_to_free,void (*data_manipulation)(void*)){ - dictionary *dict=NULL; - for_dictionaries(dict,dictionary_to_free){ - if(data_manipulation) - data_manipulation(dict->data); - if(dict->prev) - free(dict->prev); + if (dictionary_to_free){ + dictionary *dict=NULL; + for_dictionaries(dict,dictionary_to_free){ + if(data_manipulation) + data_manipulation(dict->data); + if(dict->prev) + free(dict->prev); + } + free(dict); + return NULL; } - free(dict); - return NULL; } dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data) @@ -711,6 +713,18 @@ dictionary *yon_char_parsed_convert_copy_to_dictionary(config_str parsed, int si return NULL; } +char *yon_char_parsed_to_string(config_str parsed, int size, char *divider_replace){ + if (parsed && size>0){ + char *final_string = ""; + for (int i=0;idata; - char *found = strstr(data,deleted); - int size=strlen(data)-strlen(found)+1; - char *new_data = malloc(size); - memset(new_data,0,size); - if (strlen(found)!=strlen(deleted)){ - memcpy(new_data,data,size-1); - new_data = yon_char_append(new_data,found+strlen(deleted)+1); - } else { - memcpy(new_data,data,size-2); - new_data = yon_char_append(new_data,found+strlen(deleted)); + if (dict){ + int size; + config_str parsed = yon_char_parse((char*)dict->data,&size,divider); + config_str final = NULL; + for(int i=0;idata); + dict->data=final_string; + return 1; + } else return 0; } - dict->data=(void*)(new_data); - dict->flag1=1; - return 1; + + } else return 0; +} + +int yon_config_append_element(char *key, char *append, char *divider){ + check_config{ + 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); + return 1; + } + } else return 0; } @@ -1175,14 +1205,18 @@ int yon_config_save_registered(char *path){ for_dictionaries(dct,sections_add){ char *command = yon_dictionary_get_data(dct,char*); yon_launch(command); + yon_dictionary_free_all(sections_add,free); } if (sections_remove) for_dictionaries(dct,sections_remove){ char *command = yon_dictionary_get_data(dct,char*); yon_launch(command); + yon_dictionary_free_all(sections_remove,free); } - return 1; - } else return 1; + if (sections_add||sections_remove) + return 1; + else return 0; + } else return 0; } int yon_config_force_save_registered(char *path){ diff --git a/source/libublsettings.h b/source/libublsettings.h index 577a89c..3321fff 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -492,6 +492,8 @@ dictionary *yon_char_parsed_convert_to_dictionary(config_str parsed, int size); dictionary *yon_char_parsed_convert_copy_to_dictionary(config_str parsed, int size); +char *yon_char_parsed_to_string(config_str parsed, int size, char *divider_replace); + /**yon_ubl_check_root() * [EN] * @@ -653,7 +655,7 @@ int yon_config_remove_by_key(char *key); * [RU] * Удаляет элемент [deleted] из массива параметров с ключом [key] */ -int yon_config_remove_element(char *key, char *deleted); +int yon_config_remove_element(char *key, char *delete, char *divider); void yon_config_set_status(int status);