Исправил парсер конфига

pull/4/head
Igor Belitskiy 2 years ago
parent f98ad8b431
commit aa3864f665

@ -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--;
}
}
}
@ -991,3 +1033,27 @@ int philos_config_save(char *command)
FILE *output = popen(command, "r");
return 1;
}
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;
}
}
}

@ -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

@ -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);

Loading…
Cancel
Save