| 32 | } |
| 33 | |
| 34 | int binaryReader_setup(reader_t *const reader) { |
| 35 | reader->trace_type = BIN_TRACE; |
| 36 | reader->trace_format = BINARY_TRACE_FORMAT; |
| 37 | reader->item_size = 0; |
| 38 | |
| 39 | reader->reader_params = (binary_params_t *)malloc(sizeof(binary_params_t)); |
| 40 | binary_params_t *params = (binary_params_t *)reader->reader_params; |
| 41 | reader_init_param_t *init_params = &reader->init_params; |
| 42 | memset(params, 0, sizeof(binary_params_t)); |
| 43 | |
| 44 | /* begin parsing input params and fmt */ |
| 45 | if (reader->init_params.binary_fmt_str == NULL) { |
| 46 | ERROR("binaryReader_setup: fmt_str is NULL\n"); |
| 47 | } |
| 48 | |
| 49 | if (reader->init_params.binary_fmt_str[0] != '<') { |
| 50 | ERROR( |
| 51 | "binary trace only supports little endian and format string should " |
| 52 | "start with <\n"); |
| 53 | } |
| 54 | |
| 55 | // skip the first '<' |
| 56 | params->fmt_str = strdup(init_params->binary_fmt_str + 1); |
| 57 | const char *fmt_str = params->fmt_str; |
| 58 | |
| 59 | params->n_fields = strlen(fmt_str); |
| 60 | |
| 61 | params->obj_id_field_idx = reader->init_params.obj_id_field; |
| 62 | params->obj_id_format = fmt_str[params->obj_id_field_idx - 1]; |
| 63 | params->obj_id_offset = cal_offset(fmt_str, params->obj_id_field_idx); |
| 64 | |
| 65 | params->time_field_idx = reader->init_params.time_field; |
| 66 | if (params->time_field_idx > 0) { |
| 67 | params->time_format = fmt_str[params->time_field_idx - 1]; |
| 68 | params->time_offset = cal_offset(fmt_str, params->time_field_idx); |
| 69 | } else { |
| 70 | params->time_format = '\0'; |
| 71 | params->time_offset = -1; |
| 72 | } |
| 73 | |
| 74 | params->obj_size_field_idx = reader->init_params.obj_size_field; |
| 75 | if (params->obj_size_field_idx > 0) { |
| 76 | params->obj_size_format = fmt_str[params->obj_size_field_idx - 1]; |
| 77 | params->obj_size_offset = cal_offset(fmt_str, params->obj_size_field_idx); |
| 78 | } else { |
| 79 | params->obj_size_format = '\0'; |
| 80 | params->obj_size_offset = -1; |
| 81 | } |
| 82 | |
| 83 | params->op_field_idx = reader->init_params.op_field; |
| 84 | if (params->op_field_idx > 0) { |
| 85 | params->op_format = fmt_str[params->op_field_idx - 1]; |
| 86 | params->op_offset = cal_offset(fmt_str, params->op_field_idx); |
| 87 | } else { |
| 88 | params->op_format = '\0'; |
| 89 | params->op_offset = -1; |
| 90 | } |
| 91 |
no test coverage detected