| 515 | } |
| 516 | |
| 517 | file_stat_t * init_file_stats(file_enable_t *files_enable) |
| 518 | { |
| 519 | file_stat_t *file_stats; |
| 520 | file_enable_t *file_enable; |
| 521 | unsigned int enable_count=1; /* Lists are terminated by NULL */ |
| 522 | unsigned int sign_nbr; |
| 523 | unsigned int i; |
| 524 | /*@ |
| 525 | @ loop invariant valid_file_enable_node(file_enable); |
| 526 | @ loop assigns enable_count, file_enable; |
| 527 | @*/ |
| 528 | for(file_enable=files_enable;file_enable->file_hint!=NULL;file_enable++) |
| 529 | { |
| 530 | if(file_enable->enable>0 && file_enable->file_hint->register_header_check!=NULL) |
| 531 | { |
| 532 | enable_count++; |
| 533 | } |
| 534 | } |
| 535 | /*@ assert enable_count > 0; */ |
| 536 | file_stats=(file_stat_t *)MALLOC(enable_count * sizeof(file_stat_t)); |
| 537 | /*@ assert \valid(file_stats + (0 .. enable_count-1)); */ |
| 538 | i=0; |
| 539 | /*@ |
| 540 | @ loop invariant \valid(file_stats + (0 .. enable_count-1)); |
| 541 | @ loop invariant valid_file_enable_node(file_enable); |
| 542 | @ loop invariant 1 <= enable_count; |
| 543 | @ loop invariant 0 <= i < enable_count; |
| 544 | @ loop invariant \forall integer j; 0 <= j < i ==> valid_file_stat(&file_stats[j]); |
| 545 | @*/ |
| 546 | for(file_enable=files_enable;file_enable->file_hint!=NULL;file_enable++) |
| 547 | { |
| 548 | /*@ assert i < enable_count; */ |
| 549 | /*@ assert \valid_read(file_enable); */ |
| 550 | /*@ assert \valid_read(file_enable->file_hint); */ |
| 551 | if(file_enable->enable>0 && file_enable->file_hint->register_header_check!=NULL) |
| 552 | { |
| 553 | file_stats[i].file_hint=file_enable->file_hint; |
| 554 | file_stats[i].not_recovered=0; |
| 555 | file_stats[i].recovered=0; |
| 556 | /*@ assert \valid_function((file_enable->file_hint)->register_header_check); */ |
| 557 | file_enable->file_hint->register_header_check(&file_stats[i]); |
| 558 | /*@ assert valid_file_stat(&file_stats[i]); */ |
| 559 | i++; |
| 560 | } |
| 561 | } |
| 562 | sign_nbr=index_header_check(); |
| 563 | /*@ assert \valid(file_stats + (0 .. enable_count-1)); */ |
| 564 | /*@ assert 1 <= enable_count; */ |
| 565 | file_stats[enable_count-1].file_hint=NULL; |
| 566 | #ifndef DISABLED_FOR_FRAMAC |
| 567 | log_info("%u first-level signatures enabled\n", sign_nbr); |
| 568 | #endif |
| 569 | return file_stats; |
| 570 | } |
| 571 | |
| 572 | /*@ |
| 573 | @ requires \valid(file_recovery); |
no test coverage detected