| 78 | } |
| 79 | |
| 80 | int lcsReader_setup(reader_t *reader) { |
| 81 | char *data = read_bytes(reader, sizeof(lcs_trace_header_t)); |
| 82 | lcs_trace_header_t *header = (lcs_trace_header_t *)data; |
| 83 | |
| 84 | if (!_verify_lcs_header(header)) { |
| 85 | exit(1); |
| 86 | } |
| 87 | |
| 88 | reader->lcs_ver = header->version; |
| 89 | reader->trace_type = LCS_TRACE; |
| 90 | reader->trace_format = BINARY_TRACE_FORMAT; |
| 91 | reader->trace_start_offset = sizeof(lcs_trace_header_t); |
| 92 | reader->obj_id_is_num = true; |
| 93 | reader->n_total_req = header->stat.n_req; |
| 94 | |
| 95 | if (reader->lcs_ver == 1) { |
| 96 | reader->item_size = sizeof(lcs_req_v1_t); |
| 97 | } else if (reader->lcs_ver == 2) { |
| 98 | reader->item_size = sizeof(lcs_req_v2_t); |
| 99 | } else if (reader->lcs_ver == 3) { |
| 100 | reader->item_size = sizeof(lcs_req_v3_t); |
| 101 | } else if (reader->lcs_ver == 4) { |
| 102 | reader->item_size = sizeof(lcs_req_v4_t); |
| 103 | assert(LCS_VER_TO_N_FEATURES[4] == 1); |
| 104 | } else if (reader->lcs_ver == 5) { |
| 105 | reader->item_size = sizeof(lcs_req_v5_t); |
| 106 | assert(LCS_VER_TO_N_FEATURES[5] == 2); |
| 107 | } else if (reader->lcs_ver == 6) { |
| 108 | reader->item_size = sizeof(lcs_req_v6_t); |
| 109 | assert(LCS_VER_TO_N_FEATURES[6] == 4); |
| 110 | } else if (reader->lcs_ver == 7) { |
| 111 | reader->item_size = sizeof(lcs_req_v7_t); |
| 112 | assert(LCS_VER_TO_N_FEATURES[7] == 8); |
| 113 | } else if (reader->lcs_ver == 8) { |
| 114 | reader->item_size = sizeof(lcs_req_v8_t); |
| 115 | assert(LCS_VER_TO_N_FEATURES[8] == 16); |
| 116 | } else { |
| 117 | ERROR("invalid lcs version %ld\n", (unsigned long)reader->lcs_ver); |
| 118 | exit(1); |
| 119 | } |
| 120 | |
| 121 | DEBUG("setup lcs reader %s, version %ld, item size %ld\n", reader->trace_path, (unsigned long)reader->lcs_ver, |
| 122 | (unsigned long)reader->item_size); |
| 123 | return 0; |
| 124 | } |
| 125 | |
| 126 | // read one request from trace file |
| 127 | // return 0 if success, 1 if error |
no test coverage detected