MCPcopy Create free account
hub / github.com/1a1a11a/libCacheSim / binaryReader_setup

Function binaryReader_setup

libCacheSim/traceReader/generalReader/binary.c:34–170  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32}
33
34int 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

Callers 1

setup_readerFunction · 0.85

Calls 2

cal_offsetFunction · 0.85
format_to_sizeFunction · 0.85

Tested by

no test coverage detected