int merge_mult_item_to_array(U_64 *array, struct module *mod) { int pos = 0; int n_item = 1; char item[LEN_128] = {0}; memset(array, 0, sizeof(U_64) * mod->n_col); while (strtok_next_item(item, mod->record, &pos)) { if (!merge_one_string(array, mod->n_col, item, mod, n_item)) { return 0; } n_item++; memset(&item, 0, sizeof(item)); } return 1; }
/* * computer mod->st_array and swap cur_info to pre_info * return: 1 -> ok * 0 -> some mod->n_item have modify will reprint header */ int collect_record_stat() { struct module *mod = NULL; U_64 *tmp, array[MAX_COL_NUM] = {0}; int i, n_item, ret, no_p_hdr = 1; for (i = 0; i < statis.total_mod_num; i++) { mod = &mods[i]; if (!mod->enable) continue; memset(array, 0, sizeof(array)); mod->st_flag = 0; ret = 0; if ((n_item = get_strtok_num(mod->record, ITEM_SPLIT))) { /* not merge mode, and last n_item != cur n_item, then reset mod->n_item and set reprint header flag */ if (MERGE_ITEM != conf.print_merge && n_item && n_item != mod->n_item) { no_p_hdr = 0; /* reset struct module fields */ realloc_module_array(mod, n_item); } mod->n_item = n_item; /* multiply item because of have ITEM_SPLIT */ if (strstr(mod->record, ITEM_SPLIT)) { /* merge items */ if (MERGE_ITEM == conf.print_merge) { mod->n_item = 1; ret = merge_mult_item_to_array(mod->cur_array, mod); } else { char item[LEN_128] = {0}; int num = 0; int pos = 0; while (strtok_next_item(item, mod->record, &pos)) { if (!(ret=convert_record_to_array(&mod->cur_array[num * mod->n_col],mod->n_col,item))) break; memset(item, 0, sizeof(item)); num++; } } } else { /* one item */ ret = convert_record_to_array(mod->cur_array, mod->n_col, mod->record); } /* get st record */ if (no_p_hdr && mod->pre_flag && ret) { set_st_record(mod); } if (!ret) mod->pre_flag = 0; else mod->pre_flag = 1; } else mod->pre_flag = 0; /* swap cur_array to pre_array */ tmp = mod->pre_array; mod->pre_array = mod->cur_array; mod->cur_array = tmp; } return no_p_hdr; }