diff --git a/source/philos_utils.c b/source/philos_utils.c index e34f4e8..1974254 100644 --- a/source/philos_utils.c +++ b/source/philos_utils.c @@ -14,38 +14,80 @@ void philos_set_pow_size_memory(char* str_find, int** array_size,int index, char char* STR_TB = array_size_pow[3]; size_t length = strlen(str_find); if (strstr(str_find,"K") != NULL) { - *array_size = philos_int_append(*array_size, &index, 0); + if (index!=-1) { + *array_size = philos_int_append(*array_size, &index, 0); + } + else { + philos_array_int_pars_to(array_size,0); + } str_find = yon_char_divide(str_find, length-1); str_find = yon_char_unite(str_find, " ", STR_KB, NULL); - index--; + if (index!=-1) { + index--; + } } else if (strstr(str_find,"M") != NULL) { - *array_size = philos_int_append(*array_size, &index, 1); + if (index!=-1) { + *array_size = philos_int_append(*array_size, &index, 1); + } + else { + philos_array_int_pars_to(array_size,1); + } str_find = yon_char_divide(str_find, length-1); str_find = yon_char_unite(str_find," ", STR_MB, NULL); - index--; + if (index!=-1) { + index--; + } } else if (strstr(str_find,"G") != NULL) { - *array_size = philos_int_append(*array_size, &index, 2); + if (index!=-1) { + *array_size = philos_int_append(*array_size, &index, 2); + } + else { + philos_array_int_pars_to(array_size,2); + } str_find = yon_char_divide(str_find, length-1); str_find = yon_char_unite(str_find," ", STR_GB, NULL); - index--; + if (index!=-1) { + index--; + } } else if (strstr(str_find,"T") != NULL) { - *array_size = philos_int_append(*array_size, &index, 3); + if (index!=-1) { + *array_size = philos_int_append(*array_size, &index, 3); + } + else { + philos_array_int_pars_to(array_size,3); + } str_find = yon_char_divide(str_find, length-1); str_find = yon_char_unite(str_find," ", STR_TB, NULL); - index--; + if (index!=-1) { + index--; + } } else if (strstr(str_find,"%%") != NULL) { - *array_size = philos_int_append(*array_size, &index, -1); + if (index!=-1) { + *array_size = philos_int_append(*array_size, &index, -1); + } + else { + philos_array_int_pars_to(array_size,-1); + } str_find = yon_char_divide(str_find, length-1); - index--; + if (index!=-1) { + index--; + } } else if (strstr(str_find,"-") != NULL) { - *array_size = philos_int_append(*array_size, &index, -1); - index--; + if (index!=-1) { + *array_size = philos_int_append(*array_size, &index, -1); + } + else { + philos_array_int_pars_to(array_size,-1); + } + if (index!=-1) { + index--; + } } } @@ -990,4 +1032,28 @@ int philos_config_save(char *command) { FILE *output = popen(command, "r"); return 1; -} \ No newline at end of file +} + +void philos_array_int_pars_to(int** array, int to) { + int flag = 0; + int i = 0; + for (i = 0; (*array)[i] != -2; i++) { + if ((*array)[i]==-3) { + (*array)[i] = to; + flag = 1; + break; + } + } +} + +void philos_array_char_pars_to(char*** array, char* to) { + int flag = 0; + int i = 0; + for (i = 0; (*array)[i] != NULL; i++) { + if (strcmp((*array)[i], "-") == 0) { + (*array)[i] = yon_char_new(to); + flag = 1; + break; + } + } +} diff --git a/source/philos_utils.h b/source/philos_utils.h index b91cda2..56fc4a3 100644 --- a/source/philos_utils.h +++ b/source/philos_utils.h @@ -109,4 +109,6 @@ dictionary *yon_dictionary_create_conneced(dictionary *targetdict); void yon_int_array_append(int **source, int append); static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data); int philos_config_save(char *command); +void philos_array_int_pars_to(int** array, int to); +void philos_array_char_pars_to(char*** array, char* to); #endif \ No newline at end of file diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index cb76684..96ef93d 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -352,9 +352,12 @@ void init_cfg_array(int index) { int* array_limit = NULL; char** array_disk = NULL; int index_n2 = 0; - array_limit = philos_int_append(array_limit, &index_n2, -3); - index_n2--; - array_disk = yon_char_parsed_append(array_disk, &index_n2, "-"); + for (int index = 0; index < get_device_cfg()->size_disk; index++) { + array_limit = philos_int_append(array_limit, &index_n2, -3); + index_n2--; + array_disk = yon_char_parsed_append(array_disk, &index_n2, "-"); + + } array_limit = philos_int_append(array_limit, &index_n2, -2); index_n2--; array_disk = yon_char_parsed_append(array_disk, &index_n2, NULL); @@ -460,13 +463,22 @@ void str_split_value(char* values, int index) { set_size_memory_integer(yon_char_new(value), &main_config.cpu_limit, index); } } -} +} void get_param_io_limit(char** arr_values, int index_start, int size, int index_n1, char *key_find) { int* array_limit = NULL; char** array_disk = NULL; int* array_limit_size = NULL; + if (strstr(key_find, "IOReadBandwidthMax")!=NULL) { + array_limit = main_config.i_o_limit_read[index_n1]; + array_limit_size = main_config.i_o_limit_read_size[index_n1]; + } + else { + array_limit = main_config.i_o_limit_write[index_n1]; + array_limit_size = main_config.i_o_limit_write_size[index_n1]; + } + array_disk = main_config.disk[index_n1]; int index_n2 = 0; int flag_parsed = 0; int flag_exit = 0; @@ -477,10 +489,10 @@ void get_param_io_limit(char** arr_values, int index_start, int size, int index_ if (strstr(arr_values[i], key_find)!=NULL) { // Найден ключ в массив char* disk = yon_char_divide_search(yon_char_new(value), " ", -1); - array_disk = yon_char_parsed_append(array_disk, &index_n2, disk); + philos_array_char_pars_to(&array_disk, disk); index_n2--; - philos_set_pow_size_memory(yon_char_new(value), &array_limit_size, index_n2, array_size_pow); - set_size_memory_integer(yon_char_new(value), &array_limit, index_n2); + philos_set_pow_size_memory(yon_char_new(value), &array_limit_size, -1, array_size_pow); + set_size_memory_integer(yon_char_new(value), &array_limit, -1); flag_parsed = 1; index_n2++; } @@ -493,10 +505,10 @@ void get_param_io_limit(char** arr_values, int index_start, int size, int index_ } else if (flag_parsed == 1) { char* disk = yon_char_divide_search(yon_char_new(arr_values[i]), " ", -1); - array_disk = yon_char_parsed_append(array_disk, &index_n2, disk); + philos_array_char_pars_to(&array_disk, disk); index_n2--; - philos_set_pow_size_memory(yon_char_new(arr_values[i]), &array_limit_size, index_n2, array_size_pow); - set_size_memory_integer(yon_char_new(arr_values[i]), &array_limit, index_n2); + philos_set_pow_size_memory(yon_char_new(arr_values[i]), &array_limit_size, -1, array_size_pow); + set_size_memory_integer(yon_char_new(arr_values[i]), &array_limit, -1); index_n2++; } else if (flag_exit == 1) { @@ -504,26 +516,17 @@ void get_param_io_limit(char** arr_values, int index_start, int size, int index_ } } if (index_n2 != 0) { - array_limit = philos_int_append(array_limit, &index_n2, -2); - index_n2--; - array_disk = yon_char_parsed_append(array_disk, &index_n2, NULL); - index_n2--; - array_limit_size = philos_int_append(array_limit_size, &index_n2, -2); - if (strstr(key_find, "IOReadBandwidthMax")!=NULL) { - main_config.i_o_limit_read = yon_remalloc(main_config.i_o_limit_read, (index_n1 + 1) * sizeof(int*)); - main_config.i_o_limit_read_size = yon_remalloc(main_config.i_o_limit_read_size, (index_n1 + 1) * sizeof(int*)); - main_config.disk = yon_remalloc(main_config.disk, (index_n1 + 1) * sizeof(char**)); - philos_array_int_copy(&main_config.i_o_limit_read[index_n1], &array_limit); - philos_array_int_copy(&main_config.i_o_limit_read_size[index_n1], &array_limit_size); - yon_char_parsed_copy(&main_config.disk[index_n1], &array_disk); - } - else { - main_config.i_o_limit_write = yon_remalloc(main_config.i_o_limit_write, (index_n1 + 1) * sizeof(int*)); - main_config.i_o_limit_write_size = yon_remalloc(main_config.i_o_limit_write_size, (index_n1 + 1) * sizeof(int*)); - main_config.disk = yon_remalloc(main_config.disk, (index_n1 + 1) * sizeof(char**)); - philos_array_int_copy(&main_config.i_o_limit_write[index_n1], &array_limit); - philos_array_int_copy(&main_config.i_o_limit_write_size[index_n1], &array_limit_size); - yon_char_parsed_copy(&main_config.disk[index_n1], &array_disk); + if (strstr(key_find, "BandwidthMax")!=NULL) { + if (strstr(key_find, "IOReadBandwidthMax")!=NULL) { + philos_array_int_copy(&main_config.i_o_limit_read[index_n1], &array_limit); + philos_array_int_copy(&main_config.i_o_limit_read_size[index_n1], &array_limit_size); + yon_char_parsed_copy(&main_config.disk[index_n1], &array_disk); + } + else { + philos_array_int_copy(&main_config.i_o_limit_write[index_n1], &array_limit); + philos_array_int_copy(&main_config.i_o_limit_write_size[index_n1], &array_limit_size); + yon_char_parsed_copy(&main_config.disk[index_n1], &array_disk); + } } philos_free_int_array(&array_limit, index_n2); philos_free_string_array(&array_disk, index_n2); @@ -532,6 +535,7 @@ void get_param_io_limit(char** arr_values, int index_start, int size, int index_ else { } + } void set_size_memory_integer(char* str_find, int** array_data, int index) { @@ -545,10 +549,20 @@ void set_size_memory_integer(char* str_find, int** array_data, int index) { } } if (strstr(str_find, "-")==NULL) { - *array_data = philos_int_append(*array_data, &index, atoi(str_find)); + if (index!=-1) { + *array_data = philos_int_append(*array_data, &index, atoi(str_find)); + } + else { + philos_array_int_pars_to(array_data,atoi(str_find)); + } } else { - *array_data = philos_int_append(*array_data, &index, -1); + if (index!=-1) { + *array_data = philos_int_append(*array_data, &index, -1); + } + else { + philos_array_int_pars_to(array_data,atoi(str_find)); + } } @@ -696,11 +710,12 @@ char* format_io_limit_in_tree_view(config_str* disk, int** i_o_limit, int** i_o_ free(num_and_pow_size); } } - index_to_n2++; + } else { break; } + index_to_n2++; } else { break; @@ -1278,6 +1293,7 @@ int main(int argc, char *argv[]){ yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); if (getuid()!=0) { yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + load_system_cfg(); } else { yon_ubl_status_box_render(LOAD_LOCAL_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);