@@ -19,8 +19,9 @@ static int test_for_data_overlap(const struct ReportRecord *rec, struct list_hea
19
19
{
20
20
int ret = 0 ;
21
21
const struct Range * csum = & rec -> checksum ;
22
- struct ReportRecord * rr ;
23
- list_for_each_entry (rr , records , list ) {
22
+ struct ReportRecordList * rrl ;
23
+ list_for_each_entry (rrl , records , list ) {
24
+ struct ReportRecord * rr = & rrl -> rr ;
24
25
const struct RangeList * rl ;
25
26
if (strncmp (rec -> name , rr -> name , MAX_NAME_LENGTH )) {
26
27
list_for_each_entry (rl , & rr -> data .list , list ) {
@@ -30,9 +31,8 @@ static int test_for_data_overlap(const struct ReportRecord *rec, struct list_hea
30
31
rec -> index , rec -> name , rr -> index , rr -> name ,
31
32
csum -> start , csum -> end ,
32
33
data -> start , data -> end );
33
- rr -> deps ++ ;
34
+ rr -> dep_errs ++ ;
34
35
ret ++ ;
35
- // exit(-1);
36
36
}
37
37
}
38
38
}
@@ -45,8 +45,9 @@ static int test_for_data_overlap(const struct ReportRecord *rec, struct list_hea
45
45
static int test_for_csum_overlap (struct ReportRecord * rec , struct list_head * records , const struct Range * data )
46
46
{
47
47
int ret = 0 ;
48
- struct ReportRecord * rr ;
49
- list_for_each_entry (rr , records , list ) {
48
+ struct ReportRecordList * rrl ;
49
+ list_for_each_entry (rrl , records , list ) {
50
+ struct ReportRecord * rr = & rrl -> rr ;
50
51
if (strncmp (rec -> name , rr -> name , MAX_NAME_LENGTH )) {
51
52
const struct Range * csum = & rr -> checksum ;
52
53
if (MAX (csum -> start , data -> start )<=MIN (csum -> end , data -> end )) {
@@ -64,18 +65,26 @@ static int test_for_csum_overlap(struct ReportRecord *rec, struct list_head *rec
64
65
65
66
struct ReportRecord * CreateRecord (const char * name , uint32_t start , int len )
66
67
{
67
- struct ReportRecord * rr = calloc (1 , sizeof (struct ReportRecord ));
68
+ struct ReportRecordList * rrl = calloc (1 , sizeof (struct ReportRecordList ));
69
+ struct ReportRecord * rr = & rrl -> rr ;
68
70
//fprintf(stderr,"******* CREATE %s *******\n", name);
69
71
rr -> name = strndup (name , MAX_NAME_LENGTH );
70
72
INIT_LIST_HEAD (& rr -> data .list );
71
73
rr -> checksum .start = start ;
72
74
rr -> checksum .end = start + len - 1 ;
73
- rr -> index = list_entry (Records .prev , struct ReportRecord , list )-> index + 1 ;
75
+
76
+ if (!list_empty (& Records )) {
77
+ struct ReportRecordList * prev =
78
+ list_entry (Records .prev , struct ReportRecordList , list );
79
+ rr -> index = prev -> rr .index + 1 ;
80
+ } else {
81
+ rr -> index = 1 ;
82
+ }
83
+
74
84
75
85
// check if this new checksum is in existing data ranges
76
86
test_for_data_overlap (rr , & Records );
77
-
78
- list_add_tail (& rr -> list , & Records );
87
+ list_add_tail (& rrl -> list , & Records );
79
88
return rr ;
80
89
}
81
90
@@ -128,42 +137,44 @@ void AddRangeStartLength(struct ReportRecord *rr, uint32_t start, int len)
128
137
list_add_tail (& rl -> list , & rr -> data .list );
129
138
}
130
139
131
- static void FreeRecord (struct ReportRecord * rr )
140
+ static void FreeRecord (struct ReportRecordList * rrl )
132
141
{
133
142
struct RangeList * rl , * tmp ;
134
- list_for_each_entry_safe (rl , tmp , & rr -> data .list , list ) {
143
+ list_for_each_entry_safe (rl , tmp , & rrl -> rr . data .list , list ) {
135
144
//struct RangeList *rl = list_entry(e, struct RangeList, list);
136
145
list_del (& rl -> list );
137
146
free (rl );
138
147
}
148
+ struct ReportRecord * rr = & rrl -> rr ;
139
149
if (rr -> name ) free (rr -> name );
140
150
if (rr -> msg .pbuf ) free (rr -> msg .pbuf );
141
- free (rr );
151
+ free (rrl );
142
152
}
143
153
144
154
void PrintAllRecords (FILE * fh )
145
155
{
146
- struct ReportRecord * rr ;
147
- list_for_each_entry (rr , & Records , list ) {
148
- PrintRecord (fh , rr );
156
+ struct ReportRecordList * rrl ;
157
+ list_for_each_entry (rrl , & Records , list ) {
158
+ PrintRecord (fh , & rrl -> rr );
149
159
}
150
160
}
151
161
152
162
void FreeAllRecords (void )
153
163
{
154
- struct ReportRecord * rr , * tmp ;
155
- list_for_each_entry_safe (rr , tmp , & Records , list ) {
156
- list_del (& rr -> list );
157
- FreeRecord (rr );
164
+ struct ReportRecordList * rrl , * tmp ;
165
+ list_for_each_entry_safe (rrl , tmp , & Records , list ) {
166
+ list_del (& rrl -> list );
167
+ FreeRecord (rrl );
158
168
}
159
169
}
160
170
161
171
int ProcessRecordDeps (void )
162
172
{
163
173
int errs = 0 ;
164
- struct ReportRecord * rr ;
165
- list_for_each_entry (rr , & Records , list ) {
166
- if (rr -> deps ) {
174
+ struct ReportRecordList * rrl ;
175
+ list_for_each_entry (rrl , & Records , list ) {
176
+ struct ReportRecord * rr = & rrl -> rr ;
177
+ if (rr -> dep_errs ) {
167
178
if (rr -> callback ) {
168
179
errs += rr -> callback (rr -> cb_data , rr );
169
180
} else {
0 commit comments