master #7

Merged
asmeron merged 2 commits from YanTheKaller/libublsettings:master into master 2 years ago

@ -71,7 +71,8 @@ dictionary *yon_dictionary_get_last(dictionary *dict)
{
if (dict->next){
dictionary *dct = NULL;
for_dictionaries(dct,dict);
for_dictionaries(dct,dict)
if (!dct->next)
return dct;
} else return dict;
}
@ -605,6 +606,26 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string){
return new_parsed;
}
void yon_char_parsed_append_strings (config_str array, int size, char *prepend){
if (array && size>0 && !yon_char_is_empty(prepend)){
for (int i=0;i<size;i++){
char *newstr = yon_char_append(array[i],prepend);
free(array[i]);
array[i]=newstr;
}
}
}
void yon_char_parsed_prepend_strings (config_str array, int size, char *prepend){
if (array && size>0 && !yon_char_is_empty(prepend)){
for (int i=0;i<size;i++){
char *newstr = yon_char_append(prepend,array[i]);
free(array[i]);
array[i]=newstr;
}
}
}
config_str yon_char_parsed_merge(config_str array1, int size1, config_str array2, int size2, int *final_size){
if (array1&&array2&&size1>0&&size2>0){
*final_size=0;
@ -617,6 +638,9 @@ config_str yon_char_parsed_merge(config_str array1, int size1, config_str array2
parsed_final = yon_char_parsed_append(parsed_final,final_size,array2[i]);
}
return parsed_final;
} else {
*final_size=size1;
return array1;
}
}
@ -836,12 +860,20 @@ 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 check_default_config if(__yon__config__default__strings)
#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);}
#define for_default_config dictionary *temp = NULL; for_dictionaries(temp,(dictionary*)__yon__config__default__strings)
#define yon_config_parameter_add_or_create_if_exists_with_data(dict,key,value) {if (dict){\
if (yon_dictionary_get((dictionary**)&dict,key))\
dict->data=value;\
else\
dict=yon_config_parameter_append_with_data(dict,key,value);\
}\
else dict=yon_config_parameter_new_with_data(key,value);}
int yon_config_set_ignore(char *key){
@ -860,11 +892,10 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par
}
va_list args;
va_start(args,parameter);
char *arg;
dictionary *sections = NULL;
{
yon_dictionary_add_or_create_if_exists_with_data(sections,section,parameter);
}
char *arg;
while (arg=va_arg(args,char*)){
char *key = va_arg(args,char*);
if (sections&&yon_dictionary_get(&sections,arg)) sections->data=(void*)yon_char_unite(yon_dictionary_get_data(sections,char*)," ",key,NULL);
@ -875,8 +906,6 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par
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);
@ -894,12 +923,12 @@ int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *par
__yon__config__strings->section=dict->key;
}
}
free(command);
fclose(output);
}
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");
char **output_strings = NULL;
output_strings = malloc(sizeof(char*));
int i = 0;
char str[4096];
memset(str, 0, 4096);
@ -912,11 +941,15 @@ 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;
}
__yon__config__strings->data_type=DICTIONARY_CHAR_TYPE;
__yon__config__strings->section=dict->key;
}
}
free(command);
fclose(output);
}
check_config
return 1;
@ -1125,11 +1158,12 @@ int yon_config_save_registered(char *path){
dictionary *sections_add=NULL;
dictionary *sections_remove=NULL;
for_dictionaries(dct,(dictionary*)__yon__config__strings){
if (dct->data&&strcmp(yon_dictionary_get_data(dct,char*),"")!=0){
if (((yon_config_parameter*)dct)->flag1==1){
if (dct->data&&strcmp(yon_dictionary_get_data(dct,char*),"")!=0){
((yon_config_parameter*)dct)->flag1=0;
if (sections_add&&yon_dictionary_get(&sections_add,((yon_config_parameter*)dct)->section)) sections_add->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_add,char*)," ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL);
else yon_dictionary_add_or_create_if_exists_with_data(sections_add,((yon_config_parameter*)dct)->section,yon_char_unite (ubconfig_save_command,path ? yon_char_append(" --target ",path):"", " set ", ((yon_config_parameter*)dct)->section, " ",dct->key,"=\"",yon_dictionary_get_data(dct,char*),"\"",NULL));
}
} else if (((yon_config_parameter*)dct)->flag1==-1){
((yon_config_parameter*)dct)->flag1=0;
if (sections_remove&&yon_dictionary_get(&sections_remove,((yon_config_parameter*)dct)->section)) sections_remove->data=(void*)yon_char_unite(yon_dictionary_get_data(sections_remove,char*)," ",dct->key,NULL);
@ -1137,7 +1171,6 @@ int yon_config_save_registered(char *path){
yon_dictionary_rip(dct);
}
}
}
if (sections_add)
for_dictionaries(dct,sections_add){
char *command = yon_dictionary_get_data(dct,char*);

@ -458,6 +458,10 @@ config_str yon_char_parsed_copy(config_str to_copy, int size);
*/
config_str yon_char_parsed_append(config_str parsed, int *size, char *string);
void yon_char_parsed_append_strings (config_str array, int size, char *prepend);
void yon_char_parsed_prepend_strings (config_str array, int size, char *prepend);
/**yon_char_parsed_merge(config_str array1, int size1, config_str array2, int size2, int *final_size)
* [EN]
*

Loading…
Cancel
Save