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

Function init_file_stats

src/filegen.c:517–570  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

515}
516
517file_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);

Callers 3

params_resetFunction · 0.85
LLVMFuzzerTestOneInputFunction · 0.85
fidentify.cFile · 0.85

Calls 2

MALLOCFunction · 0.85
index_header_checkFunction · 0.85

Tested by

no test coverage detected