@ @ requires buffer_size >= 10; @ requires separation: \separated(&file_hint_dad, buffer+(..), file_recovery, file_recovery_new); @ requires valid_header_check_param(buffer, buffer_size, safe_header_only, file_recovery, file_recovery_new); @ terminates \true; @ ensures valid_header_check_result(\result, file_recovery_new); @*/
| 96 | @ ensures valid_header_check_result(\result, file_recovery_new); |
| 97 | @*/ |
| 98 | static int header_check_dad(const unsigned char *buffer, const unsigned int buffer_size, const unsigned int safe_header_only, const file_recovery_t *file_recovery, file_recovery_t *file_recovery_new) |
| 99 | { |
| 100 | const struct dad_header *dad=(const struct dad_header *)buffer; |
| 101 | const unsigned int size=le32(dad->size); |
| 102 | if(size<16) |
| 103 | return 0; |
| 104 | if(file_recovery->file_stat!=NULL && |
| 105 | file_recovery->file_check!=NULL && |
| 106 | file_recovery->file_stat->file_hint==&file_hint_dad && |
| 107 | file_recovery->calculated_file_size==file_recovery->file_size) |
| 108 | { |
| 109 | /*@ assert \valid_function(file_recovery->file_check); */ |
| 110 | header_ignored(file_recovery_new); |
| 111 | return 0; |
| 112 | } |
| 113 | reset_file_recovery(file_recovery_new); |
| 114 | file_recovery_new->extension=file_hint_dad.extension; |
| 115 | file_recovery_new->min_filesize=size; |
| 116 | if(file_recovery_new->blocksize >= 16) |
| 117 | { |
| 118 | file_recovery_new->data_check=&data_check_dad; |
| 119 | file_recovery_new->file_check=&file_check_size_max; |
| 120 | } |
| 121 | return 1; |
| 122 | } |
| 123 | |
| 124 | static void register_header_check_dad(file_stat_t *file_stat) |
| 125 | { |
nothing calls this directly
no test coverage detected