master #85

Merged
asmeron merged 3 commits from YanTheKaller/libublsettings:master into master 1 month ago

@ -449,32 +449,11 @@ void yon_config_set_last_command(char *command){
config_last_load_command=yon_char_new(command); config_last_load_command=yon_char_new(command);
} }
int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){ int yon_config_import_string(YON_CONFIG_TYPE config_type, char *string){
if (config_type == YON_CONFIG_BOTH) return 0; if (!strcmp(string,"(null)\n")) return 0;
char *section = NULL;
char *current; yon_char_remove_last_symbol(string,'\n');
va_list args; char *value = yon_char_new(string);
va_start(args,config_type);
int commands_size;
config_str commands = NULL;
while ((current=va_arg(args,char*))){
yon_char_parsed_add_or_create_if_exists(commands,&commands_size,current);
}
char *final_command = yon_config_command_get_full(commands,commands_size);
yon_config_set_last_command(final_command);
if (yon_char_is_empty(final_command)) return 0;
int parameters_size;
config_str parameters = yon_config_load(final_command,&parameters_size);
char *section = NULL;
if (!strstr(final_command," -ea ")){
section = yon_config_command_get_section(final_command);
}
for (int i=0;i<parameters_size;i++){
if (!strcmp(parameters[i],"(null)\n")) continue;
yon_char_remove_last_symbol(parameters[i],'\n');
char *value = yon_char_new(parameters[i]);
char *parameter = yon_char_divide_search(value,"=",-1); char *parameter = yon_char_divide_search(value,"=",-1);
if (parameter[0]=='['){ if (parameter[0]=='['){
section = yon_char_divide_search(parameter," ",-1); section = yon_char_divide_search(parameter," ",-1);
@ -505,6 +484,34 @@ int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){
yon_config_default_remove(parameter); yon_config_default_remove(parameter);
yon_config_set_status(parameter,0); yon_config_set_status(parameter,0);
} }
}
int yon_config_load_config(YON_CONFIG_TYPE config_type, ...){
if (config_type == YON_CONFIG_BOTH) return 0;
char *current;
va_list args;
va_start(args,config_type);
int commands_size;
config_str commands = NULL;
while ((current=va_arg(args,char*))){
yon_char_parsed_add_or_create_if_exists(commands,&commands_size,current);
}
char *final_command = yon_config_command_get_full(commands,commands_size);
yon_config_set_last_command(final_command);
if (yon_char_is_empty(final_command)) return 0;
int parameters_size;
config_str parameters = yon_config_load(final_command,&parameters_size);
// char *section = NULL;
// if (!strstr(final_command," -ea ")){
// section = yon_config_command_get_section(final_command);
// }
for (int i=0;i<parameters_size;i++){
if (!strcmp(parameters[i],"(null)\n")) continue;
yon_config_import_string(config_type,parameters[i]);
} }
return 1; return 1;
} }
@ -781,7 +788,7 @@ void *yon_config_get_by_key(char *key){
} }
char *yon_config_default_get_by_key(char *key){ char *yon_config_default_get_by_key(char *key){
check_config{ check_default_config{
dictionary *dict = NULL; dictionary *dict = NULL;
for_dictionaries(dict, (dictionary*)__yon__config__default__strings){ for_dictionaries(dict, (dictionary*)__yon__config__default__strings){
if (strcmp(dict->key,key)==0&&((yon_config_parameter*)dict)->flag1!=-1){ if (strcmp(dict->key,key)==0&&((yon_config_parameter*)dict)->flag1!=-1){
@ -971,11 +978,13 @@ int yon_config_clean(){
} }
int yon_config_default_remove(char *key){ int yon_config_default_remove(char *key){
yon_config_parameter *default_parameter = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key); check_default_config{
if (default_parameter){ yon_config_parameter *default_parameter = (yon_config_parameter*)yon_dictionary_get((dictionary**)&__yon__config__default__strings,key);
__yon__config__default__strings = (yon_config_parameter*)yon_dictionary_rip((dictionary*)default_parameter); if (default_parameter){
return 1; __yon__config__default__strings = (yon_config_parameter*)yon_dictionary_rip((dictionary*)default_parameter);
} return 1;
}
}
return 0; return 0;
} }
@ -1246,11 +1255,12 @@ config_str yon_config_get_save_parameters_by_list(int *size, config_str paramete
current_size = &removed_size; current_size = &removed_size;
break; break;
case 1: case 1:
case 0:
action = "set"; action = "set";
current = &updated; current = &updated;
current_size = &updated_size; current_size = &updated_size;
break; break;
default:
continue;
} }
int position = yon_char_parsed_find_element(*current,*current_size,((yon_config_parameter*)temp)->section); int position = yon_char_parsed_find_element(*current,*current_size,((yon_config_parameter*)temp)->section);
if (position>=0){ if (position>=0){
@ -1317,7 +1327,6 @@ config_str yon_config_get_save_parameters_by_key(int *size,...){
current = &removed; current = &removed;
current_size = &removed_size; current_size = &removed_size;
break; break;
case 0:
case 1: case 1:
action = "set"; action = "set";
current = &updated; current = &updated;
@ -1409,16 +1418,21 @@ char *yon_config_save_simple(YON_CONFIG_TYPE target, char *path){
char *final_command = yon_char_parsed_to_string(parameters,parameters_size,";"); char *final_command = yon_char_parsed_to_string(parameters,parameters_size,";");
FILE *file = popen(final_command,"r"); FILE *file = popen(final_command,"r");
if (file){ if (file){
int file_size=0; int file_size=0;
config_str file_output = yon_config_load_file(file,&file_size); config_str file_output = yon_config_load_file(file,&file_size);
if (file_output){ if (file_output){
char *final_string = yon_char_parsed_to_string(file_output,file_size,""); char *output_string = yon_char_parsed_to_string(file_output,file_size,"");
if (!yon_char_is_empty(final_string)){ yon_char_parsed_free(file_output,file_size);
return final_string; char *final_string = yon_char_unite(final_command,"\n",output_string,NULL);
free(output_string);
if (!yon_char_is_empty(final_string)){
return final_string;
}
} else {
yon_char_parsed_free(file_output,file_size);
} }
fclose(file);
} }
fclose(file);
}
} }
return NULL; return NULL;
} }
@ -1436,10 +1450,15 @@ char *yon_config_save_list_simple(config_str parameters_keys, size_t size, char
int file_size=0; int file_size=0;
config_str file_output = yon_config_load_file(file,&file_size); config_str file_output = yon_config_load_file(file,&file_size);
if (file_output){ if (file_output){
char *final_string = yon_char_parsed_to_string(file_output,file_size,""); char *output_string = yon_char_parsed_to_string(file_output,file_size,"");
yon_char_parsed_free(file_output,file_size);
char *final_string = yon_char_unite(command,"\n",output_string,NULL);
free(output_string);
if (!yon_char_is_empty(final_string)){ if (!yon_char_is_empty(final_string)){
return final_string; return final_string;
} }
} else {
yon_char_parsed_free(file_output,file_size);
} }
fclose(file); fclose(file);
} }

@ -1294,6 +1294,16 @@ config_str yon_config_command_get_parameters(const char *command, int *size);
char *yon_config_get_last_command(); char *yon_config_get_last_command();
void yon_config_set_last_command(char *command); void yon_config_set_last_command(char *command);
/// @brief Import string to config
/// @param config_type configuration type
/// @param string parameter string. A line from ubconfig command output
/// @return 1 if successful, 0 otherwise.
int yon_config_import_string(YON_CONFIG_TYPE config_type, char *string);
/// @brief Load configuration
/// @param config_type Configuration type.
/// @param ... NULL-terminated List of commands.
/// @return 0 if failed, id for specific action type otherwise
int yon_config_load_config(YON_CONFIG_TYPE config_type, ...); int yon_config_load_config(YON_CONFIG_TYPE config_type, ...);
int yon_config_change_key(char *target, char *key); int yon_config_change_key(char *target, char *key);

Loading…
Cancel
Save