@ @ requires \valid(file_check_new); @ requires \valid(pos); @ requires initialization: \initialized(&file_check_new->offset) && \initialized(&file_check_new->length); @ requires valid_file_check_node(file_check_new); @*/
| 159 | @ requires valid_file_check_node(file_check_new); |
| 160 | @*/ |
| 161 | static void file_check_add_tail(file_check_t *file_check_new, file_check_list_t *pos) |
| 162 | { |
| 163 | unsigned int i; |
| 164 | const unsigned int tmp=(file_check_new->length==0?0:((const unsigned char *)file_check_new->value)[0]); |
| 165 | file_check_list_t *newe=(file_check_list_t *)MALLOC(sizeof(*newe)); |
| 166 | /*@ assert \valid(newe); */ |
| 167 | newe->offset=file_check_new->offset; |
| 168 | /*@ |
| 169 | @ loop unroll 256; |
| 170 | @ loop invariant 0 <= i <= 256; |
| 171 | @ loop invariant \forall integer j; (0 <= j < i) ==> newe->file_checks[j].list.prev == &newe->file_checks[j].list; |
| 172 | @ loop invariant \forall integer j; (0 <= j < i) ==> newe->file_checks[j].list.next == &newe->file_checks[j].list; |
| 173 | @ loop assigns i, newe->file_checks[0 .. i-1].list.prev, newe->file_checks[0 .. i-1].list.next; |
| 174 | @ loop variant 255-i; |
| 175 | @*/ |
| 176 | for(i=0;i<256;i++) |
| 177 | { |
| 178 | TD_INIT_LIST_HEAD(&newe->file_checks[i].list); |
| 179 | /*@ assert newe->file_checks[i].list.prev == &newe->file_checks[i].list; */ |
| 180 | /*@ assert newe->file_checks[i].list.next == &newe->file_checks[i].list; */ |
| 181 | } |
| 182 | /*@ assert 0 <= tmp <= 255; */ |
| 183 | /*@ assert newe->file_checks[tmp].list.prev == &newe->file_checks[tmp].list; */ |
| 184 | /*@ assert newe->file_checks[tmp].list.next == &newe->file_checks[tmp].list; */ |
| 185 | td_list_add_tail(&file_check_new->list, &newe->file_checks[tmp].list); |
| 186 | td_list_add_tail(&newe->list, &pos->list); |
| 187 | } |
| 188 | |
| 189 | #ifndef DISABLED_FOR_FRAMAC |
| 190 | /*@ |
no test coverage detected