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){ if (dict->next){
dictionary *dct = NULL; dictionary *dct = NULL;
for_dictionaries(dct,dict); for_dictionaries(dct,dict)
if (!dct->next)
return dct; return dct;
} else return dict; } else return dict;
} }
@ -605,6 +606,26 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string){
return new_parsed; 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){ 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){ if (array1&&array2&&size1>0&&size2>0){
*final_size=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]); parsed_final = yon_char_parsed_append(parsed_final,final_size,array2[i]);
} }
return parsed_final; 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__strings = NULL;
static yon_config_parameter *__yon__config__default__strings = NULL;
dictionary *__yon_config_ignored = NULL; dictionary *__yon_config_ignored = NULL;
#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE) #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 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); \ #define for_default_config dictionary *temp = NULL; for_dictionaries(temp,(dictionary*)__yon__config__default__strings)
else dict=yon_config_parameter_append_with_data(dict,key,data);} #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){ 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_list args;
va_start(args,parameter); va_start(args,parameter);
char *arg;
dictionary *sections = NULL; dictionary *sections = NULL;
{
yon_dictionary_add_or_create_if_exists_with_data(sections,section,parameter); yon_dictionary_add_or_create_if_exists_with_data(sections,section,parameter);
} char *arg;
while (arg=va_arg(args,char*)){ while (arg=va_arg(args,char*)){
char *key = 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); 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){ for_dictionaries(dict,sections){
command = yon_char_unite(ubconfig_load_command, " default get ", dict->key," ", yon_dictionary_get_data(dict,char*),NULL); command = yon_char_unite(ubconfig_load_command, " default get ", dict->key," ", yon_dictionary_get_data(dict,char*),NULL);
FILE *output = popen(command, "r"); FILE *output = popen(command, "r");
char **output_strings = NULL;
output_strings = malloc(sizeof(char*));
int i = 0; int i = 0;
char str[4096]; char str[4096];
memset(str, 0, 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; __yon__config__strings->section=dict->key;
} }
} }
free(command);
fclose(output);
} }
for_dictionaries(dict,sections){ 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); 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"); FILE *output = popen(command, "r");
char **output_strings = NULL;
output_strings = malloc(sizeof(char*));
int i = 0; int i = 0;
char str[4096]; char str[4096];
memset(str, 0, 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)){ 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_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->data_type=DICTIONARY_CHAR_TYPE;
__yon__config__strings->section=dict->key; __yon__config__strings->section=dict->key;
} }
} }
free(command);
fclose(output);
} }
check_config check_config
return 1; return 1;
@ -1125,11 +1158,12 @@ int yon_config_save_registered(char *path){
dictionary *sections_add=NULL; dictionary *sections_add=NULL;
dictionary *sections_remove=NULL; dictionary *sections_remove=NULL;
for_dictionaries(dct,(dictionary*)__yon__config__strings){ 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 (((yon_config_parameter*)dct)->flag1==1){
if (dct->data&&strcmp(yon_dictionary_get_data(dct,char*),"")!=0){
((yon_config_parameter*)dct)->flag1=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); 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 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){ } else if (((yon_config_parameter*)dct)->flag1==-1){
((yon_config_parameter*)dct)->flag1=0; ((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); 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); yon_dictionary_rip(dct);
} }
} }
}
if (sections_add) if (sections_add)
for_dictionaries(dct,sections_add){ for_dictionaries(dct,sections_add){
char *command = yon_dictionary_get_data(dct,char*); 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); 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) /**yon_char_parsed_merge(config_str array1, int size1, config_str array2, int size2, int *final_size)
* [EN] * [EN]
* *

Loading…
Cancel
Save