MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / file_check_add_tail

Function file_check_add_tail

src/filegen.c:161–187  ·  view source on GitHub ↗

@ @ 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); @*/

Source from the content-addressed store, hash-verified

159 @ requires valid_file_check_node(file_check_new);
160 @*/
161static 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/*@

Callers 1

index_header_check_auxFunction · 0.85

Calls 2

MALLOCFunction · 0.85
td_list_add_tailFunction · 0.85

Tested by

no test coverage detected