diff --git a/source/libublsettings.c b/source/libublsettings.c index b881423..14da1c8 100644 --- a/source/libublsettings.c +++ b/source/libublsettings.c @@ -515,31 +515,34 @@ char **yon_char_parse(char *parameters, int *size, char *divider){ } char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete){ - char **new_char_parsed=NULL; - new_char_parsed=malloc(sizeof(char*)*((*size)-1)); - int flag = 0; - for (int i=0;i < (*size);i++){ - if (i==item_to_delete) { - flag = 1; - } - if (flag == 0) { - new_char_parsed[i]=yon_char_new(char_string[i]); - } - else if (flag == 1 && i!=item_to_delete) { - new_char_parsed[i-1]=yon_char_new(char_string[i]); + if (char_string&&(*size)>0&&(*size)>item_to_delete&&item_to_delete>0){ + char **new_char_parsed=NULL; + new_char_parsed=malloc(sizeof(char*)*((*size)-1)); + int flag = 0; + for (int i=0;i < (*size);i++){ + if (i==item_to_delete) { + flag = 1; + } + if (flag == 0) { + new_char_parsed[i]=yon_char_new(char_string[i]); + } + else if (flag == 1 && i!=item_to_delete) { + new_char_parsed[i-1]=yon_char_new(char_string[i]); + } } - } - (*size)=(*size)-1; - return new_char_parsed; + (*size)=(*size)-1; + return new_char_parsed; + } else return NULL; } int yon_char_parsed_check_exist(char **parameters, int size, char *param){ - - for (int i=0;i0){ + for (int i=0;i0){ char *final_string = ""; + char *temp; for (int i=0;idata=data; param->data_type=DICTIONARY_CHAR_TYPE; param->first=param; - param->flag1=0; + param->flag1=1; param->key=yon_char_new(key); param->next=NULL; param->prev=NULL; @@ -914,7 +922,7 @@ int yon_config_remove_ignore(char *key){ int yon_config_get_status(char *key){ dictionary *dict; - if (yon_dictionary_get((dictionary**)&__yon__config__strings,key)){ + if ((dict=yon_dictionary_get((dictionary**)&__yon__config__strings,key))){ return ((yon_config_parameter*)dict)->flag1; } else return 0; @@ -957,7 +965,11 @@ int yon_config_load_register_no_cleaning(YON_CONFIG_TYPE config_type,char *secti 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)); } else { - __yon__config__strings->data=final_str; + if (strcmp((char*)__yon__config__strings->data,final_str)){ + __yon__config__strings->data=final_str; + } else { + continue; + } } yon_config_remove_ignore(key); if (config_type==YON_CONFIG_DEFAULT){ @@ -1011,7 +1023,11 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par 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)); } else { - __yon__config__strings->data=final_str; + if (strcmp((char*)__yon__config__strings->data,final_str)){ + __yon__config__strings->data=final_str; + } else { + continue; + } } yon_config_remove_ignore(key); if (config_type==YON_CONFIG_DEFAULT){ @@ -1059,7 +1075,12 @@ int yon_config_remove_element(char *key, char *delete, char *divider){ found = 1; } } - char *final_string = yon_char_parsed_to_string(parsed,size,divider); + char *final_string = NULL; + if (size>0) 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; @@ -1082,7 +1103,17 @@ int yon_config_append_element(char *key, char *append, char *divider){ } else return 0; } -void yon_config_set_status(int status){ +int yon_config_set_status(char *key, int status){ + check_config{ + if(yon_dictionary_get((dictionary**)&__yon__config__strings,key)){ + ((yon_config_parameter*)__yon__config__strings)->flag1=status; + return 1; + } + } + return 0; +} + +void yon_config_set_status_full(int status){ check_config{ for_config{ ((yon_config_parameter*)temp)->flag1=status; @@ -1187,14 +1218,18 @@ int yon_config_set(char *key, void *data){ } else return 0; } -int yon_config_append(char *key, char *data){ +int yon_config_append(char *key, char *data, char *divider){ check_config{ yon_config_parameter *dict = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__strings,key); - if (strcmp(((char*)dict->data),"")!=0) - dict->data=(void*)(yon_char_unite((char*)dict->data," ",data,NULL)); - else dict->data=(void*)data; - dict->flag1=1; - return 1; + if (dict){ + if (strcmp(((char*)dict->data),"")!=0){ + char *str = (char*)dict->data; + dict->data=(void*)(yon_char_unite(yon_char_is_empty(str)?"":str,yon_char_is_empty(str)?"":",",divider,data,NULL)); + } + else dict->data=(void*)yon_char_new(data); + dict->flag1=1; + return 1; + } else return 0; } else return 0; } @@ -1210,18 +1245,20 @@ void yon_config_register(char *key, char *config_section, void *data){ if (!__yon__config__strings||!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(data)); __yon__config__strings->flag1=1; + __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; + __yon__config__strings->section=yon_char_new(config_section); } else if (yon_dictionary_get((dictionary**)&__yon__config__strings,key)){ if (data!=__yon__config__strings->data&&strcmp(__yon__config__strings->data,data)){ __yon__config__strings->data=yon_char_new(data); __yon__config__strings->flag1=1; + __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; + __yon__config__strings->section=yon_char_new(config_section); if (yon_dictionary_get(&__yon_config_ignored, __yon__config__strings->key)){ yon_dictionary_rip(__yon_config_ignored); } } } - __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; - __yon__config__strings->section=yon_char_new(config_section); } config_str yon_config_load(char *command, int *str_len){ diff --git a/source/libublsettings.h b/source/libublsettings.h index dd50505..0b1dbfb 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -16,6 +16,17 @@ #define DesktopPath "/usr/share/applications/" +// #define config_parameters { {"config","VERSION","CMDLNE","SERVICESSTART","SERVICENOSTART","SERVICEMASK","HOSTNAME","MACHINEID",\ +// "APPARMOR","PARTITIONSNOMOUNT","PARTITIONSAUTOMOUNT","AUTOMOUNT_SHARE","PUBLICDIR","AUTOMOUNTSERVER",\ +// "PARTITIONSHARE","PRINTERADD","RUNLDCONFIG","DEPMOD","UPDATEHOME","TMPFS","VARTMPFS","PULSEAUDIO",\ +// "ALSACARD","ALSADEVICE","UBLINUXUPDATE","MKSQFS_OPTS","MKSQFS_FASTALG"},\ +// {"users","DEFAULTPASSWD","DEFAULTROOTPASSWD","HASHPASSWD","USERADD","GROUPADD","USERGROPS","ADDADM","USERSHADOW","DEFAULTUSER","HOSTNAME","MACHINEID"},\ +// {"system","ENVIRONMENT","AUTHPAM"},\ +// {"logging","AUDITD","JOURNALD","LOGROTATE"},\ +// {"boot"}\ +// } + + /**for_dictionaries(element, stack) * [EN] * @@ -591,8 +602,8 @@ config_str yon_dir_get_contents(char *dir_path, int *size); //config functions -#define ubconfig_save_command "ubconfig" -#define ubconfig_load_command "ubconfig --source" +#define ubconfig_save_command "ubconfig --quiet" +#define ubconfig_load_command "ubconfig --quiet --source" /** * Типы конфигураций ubconfig-а @@ -681,7 +692,9 @@ int yon_config_remove_by_key(char *key); */ int yon_config_remove_element(char *key, char *delete, char *divider); -void yon_config_set_status(int status); +int yon_config_set_status(char *key, int status); + +void yon_config_set_status_full(int status); /**yon_config_get_key_by_key(char *data) * [EN] @@ -736,7 +749,7 @@ int yon_config_set(char *key, void *data); * [RU] * Производит поиск по конфигу и дополняет значение параметра с ключом [key] значением [data]; */ -int yon_config_append(char *key, char *data); +int yon_config_append(char *key, char *data, char *divider); /**yon_config_clean() * [EN]