From e85338063c90e01e9a57a64092b02cfce62dc9e7 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 26 Dec 2023 13:21:24 +0600 Subject: [PATCH 1/5] Added few commands for processing ignored config parameters --- source/libublsettings.c | 65 +++++++++++++++++++++++++++++++++++++++++ source/libublsettings.h | 17 +++++++++++ 2 files changed, 82 insertions(+) diff --git a/source/libublsettings.c b/source/libublsettings.c index b8d6831..334c878 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -809,6 +809,7 @@ typedef struct yon_config_parameter DICT_TYPE data_type; int flag1; char *section; + int ignore; } yon_config_parameter; yon_config_parameter *yon_config_parameter_new_with_data(char *key, void *data){ @@ -821,6 +822,7 @@ yon_config_parameter *yon_config_parameter_new_with_data(char *key, void *data){ param->next=NULL; param->prev=NULL; param->section=NULL; + param->ignore=0; return param; } @@ -834,11 +836,23 @@ yon_config_parameter *yon_config_parameter_append_with_data(yon_config_parameter static yon_config_parameter *__yon__config__strings = NULL; +dictionary *__yon_config_ignored = NULL; #define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE) #define for_config dictionary *temp = NULL; for_dictionaries(temp,(dictionary*)__yon__config__strings) #define yon_config_parameter_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_config_parameter_new_with_data(key,data); \ else dict=yon_config_parameter_append_with_data(dict,key,data);} + +int yon_config_set_ignore(char *key){ + yon_dictionary_add_or_create_if_exists_with_data(__yon_config_ignored,key,NULL); +} + +int yon_config_check_ignore(char *key){ + dictionary *dict = yon_dictionary_get(&__yon_config_ignored,key); + if (dict) return 1; + else return 0; +} + int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *parameter, ...){ if (__yon__config__strings){ __yon__config__strings = yon_dictionary_free_all((dictionary*)__yon__config__strings,NULL); @@ -964,6 +978,23 @@ void *yon_config_get_all_by_key(char *key, int *size){ } } +void *yon_config_get_all_by_key_no_ignored(char *key, int *size){ + check_config{ + (*size)=0; + config_str ret_data=NULL; + dictionary *dict = NULL; + for_dictionaries(dict, (dictionary*)__yon__config__strings){ + if (strstr(dict->key,key)&&((yon_config_parameter*)dict)->flag1!=-1&&yon_config_check_ignore(dict->key)==0) { + char *ret_string = yon_char_unite(dict->key,"=",(char*)dict->data,NULL); + if (ret_data) ret_data = yon_char_parsed_append(ret_data,size,ret_string); + else ret_data = yon_char_parsed_new(size,ret_string,NULL); + } + } + return ret_data; + } +} + + config_str yon_config_get_all_keys(int *size){ check_config{ *size=0; @@ -977,6 +1008,21 @@ config_str yon_config_get_all_keys(int *size){ return NULL; } +config_str yon_config_get_all_keys_no_ignored(int *size){ + check_config{ + *size=0; + config_str final = NULL; + for_config{ + if (yon_config_check_ignore(temp->key)){ + if (!final) final = yon_char_parsed_new(size,temp->key,NULL); + else final = yon_char_parsed_append(final,size,temp->key); + } + } + return final; + } + return NULL; +} + 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); @@ -1129,6 +1175,25 @@ config_str yon_config_get_all(int *size){ } else return NULL; } +config_str yon_config_get_all_no_ignored(int *size){ + check_config{ + *size = 1; + config_str conf = NULL; + dictionary *dict = NULL; + for_dictionaries(dict,(dictionary*)__yon__config__strings){ + if (yon_config_check_ignore(dict->key)==0){ + conf = yon_remalloc(conf,sizeof(char*)*(*size)); + conf[(*size)-1] = yon_char_unite(dict->key,"=",(char*)dict->data,NULL); + (*size)++; + } + } + conf = yon_remalloc(conf,sizeof(char*)*(*size)); + conf[*size-1] = NULL; + (*size)=(*size)-1; + return conf; + } else return NULL; +} + char *yon_config_get_parameter(config_str parameters, int size, char *param) { if (param[0]==' ') diff --git a/source/libublsettings.h b/source/libublsettings.h index 4c949e0..ec394f7 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -622,6 +622,10 @@ int yon_config_save_registered(char *path); */ char *yon_config_get_parameter(config_str parameters, int size, char *param); +int yon_config_set_ignore(char *key); + +int yon_config_check_ignore(char *key); + /**yon_config_load_register(char *command) * [EN] * @@ -669,6 +673,15 @@ char *yon_config_get_section_for_key(char *key); */ void *yon_config_get_all_by_key(char *key, int *size); +/**yon_config_get_all_by_key(char *data) + * [EN] + * + * [RU] + * Возвращает значение всех параметров конфига с ключом включающем строку [key] не включая игнорируемые параметры. + * Если параметр с таким значением не найден, возвращается NULL +*/ +void *yon_config_get_all_by_key_no_ignored(char *key, int *size); + /**yon_config_get_all_keys(int *size) * [EN] * @@ -677,6 +690,8 @@ void *yon_config_get_all_by_key(char *key, int *size); */ config_str yon_config_get_all_keys(int *size); +config_str yon_config_get_all_keys_no_ignored(int *size); + /**yon_config_set(char *key, void *data) * [EN] * @@ -734,6 +749,8 @@ int yon_config_force_save_registered(char *path); */ config_str yon_config_get_all(int *size); +config_str yon_config_get_all_no_ignored(int *size); + // terminal-using functions /**yon_launch_app_with_arguments(char *name, char *args) From 328e670f5f8b982100c7a15835cf5ec66a52347e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 26 Dec 2023 13:28:18 +0600 Subject: [PATCH 2/5] Fixed loading only ignored parameters instead of unignored --- source/libublsettings.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libublsettings.c b/source/libublsettings.c index 334c878..5abb039 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -1013,7 +1013,7 @@ config_str yon_config_get_all_keys_no_ignored(int *size){ *size=0; config_str final = NULL; for_config{ - if (yon_config_check_ignore(temp->key)){ + if (!yon_config_check_ignore(temp->key)){ if (!final) final = yon_char_parsed_new(size,temp->key,NULL); else final = yon_char_parsed_append(final,size,temp->key); } From 010ec59ac3d174fd670c30a9ab61b70a261a1175 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Dec 2023 12:02:36 +0600 Subject: [PATCH 3/5] Added preloading of default configuration --- source/libublsettings.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/source/libublsettings.c b/source/libublsettings.c index 5abb039..bbe8f6a 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -836,7 +836,9 @@ yon_config_parameter *yon_config_parameter_append_with_data(yon_config_parameter static yon_config_parameter *__yon__config__strings = NULL; +static yon_config_parameter *__yon__config__default__strings = NULL; dictionary *__yon_config_ignored = NULL; + #define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE) #define for_config dictionary *temp = NULL; for_dictionaries(temp,(dictionary*)__yon__config__strings) #define yon_config_parameter_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_config_parameter_new_with_data(key,data); \ @@ -862,8 +864,7 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par char *arg; dictionary *sections = NULL; { - if (sections&&yon_dictionary_get(§ions,section)) sections->data=(void*)yon_char_unite(yon_dictionary_get_data(sections,char*)," ",parameter,NULL); - else yon_dictionary_add_or_create_if_exists_with_data(sections,section,parameter); + yon_dictionary_add_or_create_if_exists_with_data(sections,section,parameter); } while (arg=va_arg(args,char*)){ char *key = va_arg(args,char*); @@ -872,6 +873,29 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par } char *command=NULL; dictionary *dict; + for_dictionaries(dict,sections){ + command = yon_char_unite(ubconfig_load_command, " default get ", dict->key," ", yon_dictionary_get_data(dict,char*),NULL); + FILE *output = popen(command, "r"); + char **output_strings = NULL; + output_strings = malloc(sizeof(char*)); + int i = 0; + char str[4096]; + memset(str, 0, 4096); + while (fgets(str, 4096, output)) + { + if (strcmp(str, "") != 0&& strcmp(str,"(null)\n")!=0) + { + char *key = yon_char_divide_search(str,"=",-1); + char *final_str=yon_char_divide_search(str,"\n",-1); + + if (!yon_dictionary_get((dictionary**)&__yon__config__strings,key)){ + yon_config_parameter_add_or_create_if_exists_with_data(__yon__config__strings,key,yon_char_new(final_str)); + } + __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; + __yon__config__strings->section=dict->key; + } + } + } for_dictionaries(dict,sections){ command = yon_char_unite(ubconfig_load_command,config_type==YON_CONFIG_GLOBAL ? " global get " : " system get ", dict->key," ", yon_dictionary_get_data(dict,char*),NULL); FILE *output = popen(command, "r"); @@ -886,7 +910,10 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par { char *key = yon_char_divide_search(str,"=",-1); char *final_str=yon_char_divide_search(str,"\n",-1); - yon_config_parameter_add_or_create_if_exists_with_data(__yon__config__strings,key,yon_char_new(final_str)); + + if (!yon_dictionary_get((dictionary**)&__yon__config__strings,key)){ + yon_config_parameter_add_or_create_if_exists_with_data(__yon__config__strings,key,yon_char_new(final_str)); + } __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; __yon__config__strings->section=dict->key; } From a64a11767b91e07064fcdb1f42c831446aef9461 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Dec 2023 12:04:16 +0600 Subject: [PATCH 4/5] Removed unused variable --- source/libublsettings.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/libublsettings.c b/source/libublsettings.c index bbe8f6a..c0d22fd 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -836,7 +836,6 @@ yon_config_parameter *yon_config_parameter_append_with_data(yon_config_parameter static yon_config_parameter *__yon__config__strings = NULL; -static yon_config_parameter *__yon__config__default__strings = NULL; dictionary *__yon_config_ignored = NULL; #define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE) From c2fa9e1b2be55d2a29386332a4a0f059781a1f8f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Dec 2023 12:41:17 +0600 Subject: [PATCH 5/5] Fixed version pasting and cleaning --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fae2d02..4b944b8 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ init: else \ LATEST_TAG="Development"; \ fi; \ - sed -r "s/^(project\(${PRJNAME} VERSION ).*/\1$${LATEST_TAG}\)/" -i ${FILE_VER}; \ + sed -r "s/^(project\(${PKGNAME} VERSION ).*/\1$${LATEST_TAG}\)/" -i ${FILE_VER}; \ echo "-- Build path: ${CMAKE_UTILS_BUILD_DIR}" depend: @@ -98,6 +98,8 @@ install: check clean: @echo "Clean ..." + @sed -r "s/^(project\(${PKGNAME} VERSION ).*/\10\)/" -i ${FILE_VER} + @$(RM) -rd ${CMAKE_UTILS_BUILD_DIR} @$(RM) -rd ${CMAKE_UTILS_BUILD_DIR} @if [ -d ${CMAKE_UTILS_BUILD_DIR} ]; then \