diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index 981fa38..8d88574 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -252,15 +252,39 @@ void main_update_information() { void load_system_cfg() { template_cfg(CMD_LOAD_SYSTEM); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS, BACKGROUND_IMAGE_SUCCESS_TYPE); } void load_global_cfg() { template_cfg(CMD_LOAD_GLOBAL); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); +} + +void clear_array() { + philos_free_string_array(&main_config.type_quota, main_config.size_tree_view); + philos_free_string_array(&main_config.quota_volume , main_config.size_tree_view); + philos_free_string_array(&main_config.soft_raw_limit , main_config.size_tree_view); + philos_free_string_array(&main_config.hard_raw_limit , main_config.size_tree_view); + philos_free_string_array(&main_config.swap , main_config.size_tree_view); + philos_free_string_array(&main_config.cpu_limit , main_config.size_tree_view); + philos_free_string_array(&main_config.i_o_limit_read , main_config.size_tree_view); + philos_free_string_array(&main_config.i_o_limit_write , main_config.size_tree_view); + + philos_free_int_array(&main_config.type_quota_size, main_config.size_tree_view); + philos_free_int_array(&main_config.quota_volume_size, main_config.size_tree_view); + philos_free_int_array(&main_config.soft_raw_limit_size, main_config.size_tree_view); + philos_free_int_array(&main_config.hard_raw_limit_size, main_config.size_tree_view); + philos_free_int_array(&main_config.swap_size, main_config.size_tree_view); + philos_free_int_array(&main_config.cpu_limit_size, main_config.size_tree_view); + philos_free_int_array(&main_config.i_o_limit_read_size, main_config.size_tree_view); + philos_free_int_array(&main_config.i_o_limit_write_size, main_config.size_tree_view); + gtk_list_store_clear(main_config.list); + main_config.size_tree_view = 0; } void template_cfg(char* cmd) { + clear_array(); int size = 0; - int index_quotas = 0; char** cfg = yon_config_load(cmd, &size); for (int index = 0; index < size; index++) { char* str_key_value = yon_char_new(cfg[index]); @@ -271,13 +295,13 @@ void template_cfg(char* cmd) { size_t length = strlen(str_key_value); str_key_value = yon_char_divide(str_key_value, length-2); } - str_split_key(str_key, index_quotas); - str_split_value(str_key_value, index); - index_quotas++; + str_split_key(str_key, main_config.size_tree_view); + str_split_value(str_key_value, main_config.size_tree_view); + main_config.size_tree_view++; } } - if (index_quotas != 0) { - fill_tree_view(0, size); + if (main_config.size_tree_view != 0) { + fill_tree_view(0, main_config.size_tree_view, 0); } @@ -352,70 +376,70 @@ void str_split_value(char* values, int index) { value = arr_values[index_1]; key = yon_char_divide_search(value, "=", -1); if (yon_char_find_count(key, "MemoryHigh") != 0) { - set_pow_size(value, main_config.soft_raw_limit_size, main_config.soft_raw_limit, index); + set_pow_size(value, &main_config.soft_raw_limit_size, &main_config.soft_raw_limit, index); } else { - set_pow_size("-", main_config.soft_raw_limit_size, main_config.soft_raw_limit, index); + set_pow_size("-", &main_config.soft_raw_limit_size, &main_config.soft_raw_limit, index); } if (yon_char_find_count(key, "MemoryMax") != 0) { - set_pow_size(value, main_config.hard_raw_limit_size, main_config.hard_raw_limit, index); + set_pow_size(value, &main_config.hard_raw_limit_size, &main_config.hard_raw_limit, index); } else { - set_pow_size("-", main_config.hard_raw_limit_size, main_config.hard_raw_limit, index); + set_pow_size("-", &main_config.hard_raw_limit_size, &main_config.hard_raw_limit, index); } if (yon_char_find_count(key, "MemorySwapMax") != 0) { - set_pow_size(value, main_config.swap_size, main_config.swap, index); + set_pow_size(value, &main_config.swap_size, &main_config.swap, index); } else { - set_pow_size("-", main_config.swap_size, main_config.swap, index); + set_pow_size("-", &main_config.swap_size, &main_config.swap, index); } if (yon_char_find_count(key, "CPUQuota") != 0) { - set_pow_size(value, main_config.cpu_limit_size, main_config.cpu_limit, index); + set_pow_size(value, &main_config.cpu_limit_size, &main_config.cpu_limit, index); } else { - set_pow_size("-", main_config.cpu_limit_size, main_config.cpu_limit, index); + set_pow_size("-", &main_config.cpu_limit_size, &main_config.cpu_limit, index); } if (yon_char_find_count(key, "IOReadBandwidthMax") != 0) { - set_pow_size(value, main_config.i_o_limit_read_size, main_config.i_o_limit_read, index); + set_pow_size(value, &main_config.i_o_limit_read_size, &main_config.i_o_limit_read, index); } else { - set_pow_size("-", main_config.i_o_limit_read_size, main_config.i_o_limit_read, index); + set_pow_size("-", &main_config.i_o_limit_read_size, &main_config.i_o_limit_read, index); } if (yon_char_find_count(key, "IOWriteBandwidthMax") != 0) { - set_pow_size(value, main_config.i_o_limit_write_size, main_config.i_o_limit_write, index); + set_pow_size(value, &main_config.i_o_limit_write_size, &main_config.i_o_limit_write, index); } else { - set_pow_size("-", main_config.i_o_limit_write_size, main_config.i_o_limit_write, index); + set_pow_size("-", &main_config.i_o_limit_write_size, &main_config.i_o_limit_write, index); } } } -void set_pow_size(char* str_find, int* array_size, char** array_data , int index) { +void set_pow_size(char* str_find, int** array_size, char*** array_data , int index) { if (strstr(str_find,"K") != NULL) { - array_size = philos_int_append(array_size, &index, 0); + *array_size = philos_int_append(*array_size, &index, 0); index--; } else if (strstr(str_find,"M") != NULL) { - array_size = philos_int_append(array_size, &index, 1); + *array_size = philos_int_append(*array_size, &index, 1); index--; } else if (strstr(str_find,"G") != NULL) { - array_size = philos_int_append(array_size, &index, 2); + *array_size = philos_int_append(*array_size, &index, 2); index--; } else if (strstr(str_find,"T") != NULL) { - array_size = philos_int_append(array_size, &index, 3); + *array_size = philos_int_append(*array_size, &index, 3); index--; } else if (strstr(str_find,"\%") != NULL) { - array_size = philos_int_append(array_size, &index, -1); + *array_size = philos_int_append(*array_size, &index, -1); index--; } else if (strstr(str_find,"\"") != NULL) { } else if (strstr(str_find,"-") != NULL) { - array_size = philos_int_append(array_size, &index, -1); + *array_size = philos_int_append(*array_size, &index, -1); index--; } if (strstr(str_find, "-") == NULL) { @@ -425,11 +449,11 @@ void set_pow_size(char* str_find, int* array_size, char** array_data , int index str_find = yon_char_divide(str_find, length-2); } size_t length = strlen(str_find); - str_find = yon_char_divide(str_find, length-2); - array_data = yon_char_parsed_append(array_data, &index, str_find); + str_find = yon_char_divide(str_find, length-1); + *array_data = yon_char_parsed_append(*array_data, &index, str_find); } else { - array_data = yon_char_parsed_append(array_data, &index, "-"); + *array_data = yon_char_parsed_append(*array_data, &index, "-"); } } @@ -509,16 +533,21 @@ void tree_view_add(int index) { main_config.i_o_limit_read_size = philos_int_append(main_config.i_o_limit_read_size, &main_config.size_tree_view, add_get_read_device_size()); main_config.size_tree_view--; main_config.i_o_limit_write_size = philos_int_append(main_config.i_o_limit_write_size, &main_config.size_tree_view, add_get_write_device_size()); - fill_tree_view(main_config.size_tree_view-1, main_config.size_tree_view); + fill_tree_view(main_config.size_tree_view-1, main_config.size_tree_view, 1); } -void fill_tree_view(int start, int size) { +void fill_tree_view(int start, int size, int flag_gui_add) { + GtkTreeModel *model = GTK_TREE_MODEL(main_config.list); + if (flag_gui_add == 0) { + g_object_ref(main_config.list); + gtk_list_store_clear(main_config.list); + } for (int index = start; index < size; index++) { GtkTreeIter iter; gtk_list_store_append(main_config.list,&iter); gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index], 1,main_config.quota_volume[index], - // === NULL === Ошибка + // === NULL === О 2,main_config.soft_raw_limit[index], 3,main_config.hard_raw_limit[index], 4,main_config.swap[index], @@ -526,6 +555,9 @@ void fill_tree_view(int start, int size) { 6,main_config.i_o_limit_read[index], 7,main_config.i_o_limit_write[index],-1); } + if (flag_gui_add != 0) { + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), model); + } } int tree_view_edit() { diff --git a/source/ubl-settings-resourcequota.h b/source/ubl-settings-resourcequota.h index 57a56b5..2d4447a 100755 --- a/source/ubl-settings-resourcequota.h +++ b/source/ubl-settings-resourcequota.h @@ -181,6 +181,7 @@ void load_system_cfg(); void load_global_cfg(); void template_cfg(char* cmd); void str_split_value(char* values, int index); -void set_pow_size(char* str_find, int* array_size, char** array_data, int index); +void set_pow_size(char* str_find, int** array_size, char*** array_data, int index); void str_split_key(char* value, int index); -void fill_tree_view(int start, int size); \ No newline at end of file +void fill_tree_view(int start, int size, int flag_gui_add); +void clear_array(); \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index dd61852..7fed624 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -305,7 +305,23 @@ char *yon_char_get_augumented(char *source, char *append) else return NULL; } +void philos_free_string_array(char ***array, int size) { + for (int i = 0; i < size; i++){ + free((*array)[i]); + } + if (size!= 0) { + free(*array); + (*array) = NULL; + } + +} +void philos_free_int_array(int **array, int size) { + if (size!= 0) { + free(*array); + *array = NULL; + } +} /**[EN] * * creates new char string by copying another char. diff --git a/source/ubl-utils.h b/source/ubl-utils.h index acd60c5..e05164c 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -120,6 +120,10 @@ void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(vo char* philos_str_remove(char *str, const char *sub); char *yon_char_get_augumented(char *source, char *append); +void philos_free_string_array(char ***array, int size); + +void philos_free_int_array(int **array, int size); + char *yon_char_new(char *chr); char *yon_char_unite(char *source, ...);