diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 3f74c37..6b91f3b 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -697,6 +697,12 @@ enum YON_CONFIG_SAVED_TYPE yon_config_register(char *key,char *config_load, char yon_config_parameter_add_or_create_if_exists_with_data(__yon__config__strings,key,data); current = __yon__config__strings; } + + yon_config_parameter *default_parameter = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key); + if (default_parameter){ + __yon__config__default__strings = (yon_config_parameter*)yon_dictionary_rip((dictionary*)default_parameter); + } + switch(current->flag1){ case -1: save_type = YON_CONFIG_SAVED_REMOVED; case 1: save_type = YON_CONFIG_SAVED_CHANGED; @@ -718,115 +724,155 @@ enum YON_CONFIG_SAVED_TYPE yon_config_register(char *key,char *config_load, char return save_type; } -void yon_config_register_default(char *key, char *config_load, void *data){ - if (!yon_char_is_empty(key)){ - key=yon_char_new(key); - config_load=yon_char_new(config_load); - yon_config_parameter *current = NULL; - if (data){ - if (!__yon__config__default__strings||!(current=(yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ - { - if (__yon__config__default__strings){ - char *data_copy = yon_char_new(data); - yon_config_parameter* dict=NULL; - for_dictionaries(dict,__yon__config__default__strings){ - if (!dict->next){ - __yon__config__default__strings=dict; - } - } - __yon__config__default__strings=yon_config_parameter_append_with_data(__yon__config__default__strings,key,data_copy); - - } - else { - char *data_copy = yon_char_new(data); - __yon__config__strings=yon_config_parameter_new_with_data(key,yon_char_new(data)); - } - } - __yon__config__default__strings = (yon_config_parameter*)yon_dictionary_get_last((dictionary*)__yon__config__default__strings); - __yon__config__default__strings->flag1=1; - __yon__config__default__strings->data_type=DICTIONARY_CHAR_TYPE; - __yon__config__default__strings->load_command=config_load; - int size=0; - config_str section = yon_char_parse(config_load,&size," "); - __yon__config__default__strings->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); - yon_char_parsed_free(section,size); - } - else if ((current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ - yon_config_parameter *cur_default = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,current->key); - if ((current->data&&data!=__yon__config__default__strings->data&&strcmp(__yon__config__default__strings->data,data))||!current->data){ - current->data=yon_char_new(data); - current->flag1=1; - current->data_type=DICTIONARY_CHAR_TYPE; - current->load_command=config_load; - if (yon_dictionary_get(&__yon_config_ignored, current->key)){ - __yon_config_ignored = yon_dictionary_rip(__yon_config_ignored); - } - int size=0; - config_str section = yon_char_parse(config_load,&size," "); - current->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); - yon_char_parsed_free(section,size); - if ((cur_default&&strcmp((char*)cur_default->data,(char*)current->data))){ - yon_config_remove_by_key(current->key); - } - } - } - } else if ((current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))) { - current->data=NULL; - current->flag1=0; - current->data_type=DICTIONARY_CHAR_TYPE; - current->load_command=config_load; - int size=0; - config_str section = yon_char_parse(config_load,&size," "); - current->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); - yon_char_parsed_free(section,size); - } else { - if (!__yon__config__default__strings||!(current=(yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ - { - if (__yon__config__default__strings){ - yon_config_parameter* dict=NULL; - for_dictionaries(dict,__yon__config__default__strings){ - if (!dict->next){ - __yon__config__default__strings=dict; - } - } - __yon__config__default__strings=yon_config_parameter_append_with_data(__yon__config__default__strings,key,NULL); - - } - else { - __yon__config__default__strings=yon_config_parameter_new_with_data(key,NULL); - } - } - yon_config_set_ignore(key); - __yon__config__default__strings = (yon_config_parameter*)yon_dictionary_get_last((dictionary*)__yon__config__default__strings); - __yon__config__default__strings->flag1=0; - __yon__config__default__strings->data_type=DICTIONARY_CHAR_TYPE; - __yon__config__default__strings->load_command=config_load; - int size=0; - config_str section = yon_char_parse(config_load,&size," "); - __yon__config__default__strings->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); - yon_char_parsed_free(section,size); - } - else if ((current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ - if ((current->data&&data!=__yon__config__default__strings->data&&strcmp(__yon__config__default__strings->data,data))||!current->data){ - yon_config_set_ignore(key); - - current->data=NULL; - current->flag1=0; - current->data_type=DICTIONARY_CHAR_TYPE; - current->load_command=config_load; - if (yon_dictionary_get(&__yon_config_ignored, current->key)){ - __yon_config_ignored= yon_dictionary_rip(__yon_config_ignored); - } - int size=0; - config_str section = yon_char_parse(config_load,&size," "); - current->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); - yon_char_parsed_free(section,size); - } - } +enum YON_CONFIG_SAVED_TYPE yon_config_register_default(char *key,char *config_load, char *data){ + if (yon_char_is_empty(key)||yon_char_is_empty(config_load)) return YON_CONFIG_SAVED_ERROR; + + enum YON_CONFIG_SAVED_TYPE save_type = YON_CONFIG_SAVED_NEW; + + yon_config_parameter *current = NULL; + check_default_config{ + current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key); + if (!current){ + yon_config_parameter_add_or_create_if_exists_with_data(__yon__config__default__strings,key,data); + current = (yon_config_parameter*)yon_dictionary_get_last((dictionary *)__yon__config__default__strings); + } else if (!yon_char_is_empty(data)&&!strcmp((char*)current->data,(char*)data)){ + save_type=YON_CONFIG_SAVED_EXIST; + return save_type; } + } else { + yon_config_parameter_add_or_create_if_exists_with_data(__yon__config__default__strings,key,data); + current = __yon__config__default__strings; + } + switch(current->flag1){ + case -1: save_type = YON_CONFIG_SAVED_REMOVED; + case 1: save_type = YON_CONFIG_SAVED_CHANGED; + default: save_type = YON_CONFIG_SAVED_NEW; + } + config_load = yon_char_new(config_load); + + current->data_type=DICTIONARY_CHAR_TYPE; + current->load_command = config_load; + current->section = yon_config_command_get_section(config_load); + + if (data){ + yon_config_remove_ignore(key); + current->flag1=1; + } else { + yon_config_set_ignore(key); + current->flag1 = 0; } + return save_type; } +// void yon_config_register_default(char *key, char *config_load, void *data){ +// if (!yon_char_is_empty(key)){ +// key=yon_char_new(key); +// config_load=yon_char_new(config_load); +// yon_config_parameter *current = NULL; +// if (data){ +// if (!__yon__config__default__strings||!(current=(yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ +// { +// if (__yon__config__default__strings){ +// char *data_copy = yon_char_new(data); +// yon_config_parameter* dict=NULL; +// for_dictionaries(dict,__yon__config__default__strings){ +// if (!dict->next){ +// __yon__config__default__strings=dict; +// } +// } +// __yon__config__default__strings=yon_config_parameter_append_with_data(__yon__config__default__strings,key,data_copy); + +// } +// else { +// char *data_copy = yon_char_new(data); +// __yon__config__strings=yon_config_parameter_new_with_data(key,yon_char_new(data)); +// } +// } +// __yon__config__default__strings = (yon_config_parameter*)yon_dictionary_get_last((dictionary*)__yon__config__default__strings); +// __yon__config__default__strings->flag1=1; +// __yon__config__default__strings->data_type=DICTIONARY_CHAR_TYPE; +// __yon__config__default__strings->load_command=config_load; +// int size=0; +// config_str section = yon_char_parse(config_load,&size," "); +// __yon__config__default__strings->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); +// yon_char_parsed_free(section,size); +// } +// else if ((current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ +// yon_config_parameter *cur_default = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,current->key); +// if ((current->data&&data!=__yon__config__default__strings->data&&strcmp(__yon__config__default__strings->data,data))||!current->data){ +// current->data=yon_char_new(data); +// current->flag1=1; +// current->data_type=DICTIONARY_CHAR_TYPE; +// current->load_command=config_load; +// if (yon_dictionary_get(&__yon_config_ignored, current->key)){ +// __yon_config_ignored = yon_dictionary_rip(__yon_config_ignored); +// } +// int size=0; +// config_str section = yon_char_parse(config_load,&size," "); +// current->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); +// yon_char_parsed_free(section,size); +// if ((cur_default&&strcmp((char*)cur_default->data,(char*)current->data))){ +// yon_config_remove_by_key(current->key); +// } +// } +// } +// } else if ((current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))) { +// current->data=NULL; +// current->flag1=0; +// current->data_type=DICTIONARY_CHAR_TYPE; +// current->load_command=config_load; +// int size=0; +// config_str section = yon_char_parse(config_load,&size," "); +// current->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); +// yon_char_parsed_free(section,size); +// } else { +// if (!__yon__config__default__strings||!(current=(yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ +// { +// if (__yon__config__default__strings){ +// yon_config_parameter* dict=NULL; +// for_dictionaries(dict,__yon__config__default__strings){ +// if (!dict->next){ +// __yon__config__default__strings=dict; +// } +// } +// __yon__config__default__strings=yon_config_parameter_append_with_data(__yon__config__default__strings,key,NULL); + +// } +// else { +// __yon__config__default__strings=yon_config_parameter_new_with_data(key,NULL); +// } +// } +// yon_config_set_ignore(key); +// __yon__config__default__strings = (yon_config_parameter*)yon_dictionary_get_last((dictionary*)__yon__config__default__strings); +// __yon__config__default__strings->flag1=0; +// __yon__config__default__strings->data_type=DICTIONARY_CHAR_TYPE; +// __yon__config__default__strings->load_command=config_load; +// int size=0; +// config_str section = yon_char_parse(config_load,&size," "); +// __yon__config__default__strings->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); +// yon_char_parsed_free(section,size); +// } +// else if ((current = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key))){ +// if ((current->data&&data!=__yon__config__default__strings->data&&strcmp(__yon__config__default__strings->data,data))||!current->data){ +// yon_config_set_ignore(key); + +// current->data=NULL; +// current->flag1=0; +// current->data_type=DICTIONARY_CHAR_TYPE; +// current->load_command=config_load; +// if (yon_dictionary_get(&__yon_config_ignored, current->key)){ +// __yon_config_ignored= yon_dictionary_rip(__yon_config_ignored); +// } +// int size=0; +// config_str section = yon_char_parse(config_load,&size," "); +// current->section=yon_char_new(section[yon_char_parsed_check_exist(section,size,"get")+1]); +// yon_char_parsed_free(section,size); +// } +// } +// } +// } +// } + config_str yon_config_load(char *command, int *str_len){ FILE *output = popen(command, "r"); char **output_strings = NULL; diff --git a/source/libublsettings.h b/source/libublsettings.h index e69f136..b49b4a9 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -262,7 +262,7 @@ dictionary *yon_dictionary_get(dictionary **dict, char *key); * [EN] * * [RU] - * Вырезает элемент из словаря и возвращает вырезанный элемент. + * Вырезает элемент из словаря и возвращает ближайший элемент. */ dictionary *yon_dictionary_rip(dictionary *dict); @@ -993,7 +993,7 @@ enum YON_CONFIG_SAVED_TYPE{ enum YON_CONFIG_SAVED_TYPE yon_config_register(char *key,char *config_load, char *data); // void yon_config_register(char *key, char* config_section, void *data); -void yon_config_register_default(char *key, char *config_load, void *data); +enum YON_CONFIG_SAVED_TYPE yon_config_register_default(char *key,char *config_load, char *data); char *yon_config_save_simple(YON_CONFIG_TYPE target, char *path);