PhotoRec: stricter check for .mb files
This commit is contained in:
parent
617c63a47f
commit
0c1bc9427c
1 changed files with 33 additions and 29 deletions
|
@ -29,9 +29,9 @@
|
|||
#include <stdio.h>
|
||||
#include "types.h"
|
||||
#include "filegen.h"
|
||||
#include "common.h"
|
||||
|
||||
static void register_header_check_mb(file_stat_t *file_stat);
|
||||
static int header_check_mb(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);
|
||||
|
||||
const file_hint_t file_hint_mb= {
|
||||
.extension="mb",
|
||||
|
@ -43,36 +43,40 @@ const file_hint_t file_hint_mb= {
|
|||
.register_header_check=®ister_header_check_mb
|
||||
};
|
||||
|
||||
static const unsigned char mb_header[8]= {'M','a','y','a','F','O','R','4'};
|
||||
static const unsigned char mb_header2[8]= {'M','A','Y','A','F','O','R','4'};
|
||||
static const unsigned char mp_header[8]= {'M','P','L','E','F','O','R','4'};
|
||||
|
||||
static void register_header_check_mb(file_stat_t *file_stat)
|
||||
struct maya_header
|
||||
{
|
||||
register_header_check(8, mb_header, sizeof(mb_header), &header_check_mb, file_stat);
|
||||
register_header_check(8, mb_header2, sizeof(mb_header2), &header_check_mb, file_stat);
|
||||
register_header_check(8, mp_header, sizeof(mp_header), &header_check_mb, file_stat);
|
||||
}
|
||||
char magic[4];
|
||||
uint32_t size;
|
||||
char magic2[8];
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
static int header_check_mb(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)
|
||||
{
|
||||
if(memcmp(&buffer[8], mb_header, sizeof(mb_header))==0 ||
|
||||
memcmp(&buffer[8], mb_header2, sizeof(mb_header2))==0)
|
||||
{
|
||||
reset_file_recovery(file_recovery_new);
|
||||
file_recovery_new->extension=file_hint_mb.extension;
|
||||
file_recovery_new->min_filesize=8;
|
||||
file_recovery_new->calculated_file_size=(uint64_t)(buffer[4]<<24)+(buffer[5]<<16)+(buffer[6]<<8)+buffer[7]+8;
|
||||
file_recovery_new->data_check=&data_check_size;
|
||||
file_recovery_new->file_check=&file_check_size;
|
||||
return 1;
|
||||
}
|
||||
if(memcmp(&buffer[8], mp_header, sizeof(mp_header))==0)
|
||||
{
|
||||
reset_file_recovery(file_recovery_new);
|
||||
file_recovery_new->extension="mp";
|
||||
file_recovery_new->min_filesize=8;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
const struct maya_header *hdr=(const struct maya_header *)buffer;
|
||||
if(memcmp(buffer,"FOR4",4)!=0 || be32(hdr->size) < 8)
|
||||
return 0;
|
||||
reset_file_recovery(file_recovery_new);
|
||||
file_recovery_new->extension=file_hint_mb.extension;
|
||||
file_recovery_new->min_filesize=16;
|
||||
file_recovery_new->calculated_file_size=be32(hdr->size)+8;
|
||||
file_recovery_new->data_check=&data_check_size;
|
||||
file_recovery_new->file_check=&file_check_size;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int header_check_mp(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)
|
||||
{
|
||||
if(memcmp(buffer,"FOR4",4)!=0)
|
||||
return 0;
|
||||
reset_file_recovery(file_recovery_new);
|
||||
file_recovery_new->extension="mp";
|
||||
file_recovery_new->min_filesize=16;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void register_header_check_mb(file_stat_t *file_stat)
|
||||
{
|
||||
register_header_check(8, "MayaFOR4", 8, &header_check_mb, file_stat);
|
||||
register_header_check(8, "MAYAFOR4", 8, &header_check_mb, file_stat);
|
||||
register_header_check(8, "MPLEFOR4", 8, &header_check_mp, file_stat);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue