diff options
author | Christophe Grenier <[email protected]> | 2011-09-17 13:45:39 +0200 |
---|---|---|
committer | Christophe Grenier <[email protected]> | 2011-09-17 13:45:39 +0200 |
commit | 6cc686c84a447f27f9e2158d7a5c5692213211a1 (patch) | |
tree | 15a2ad7548e48a86406cc3afdd0d7e25830c9810 /src | |
parent | 5e4cb1abdbfa2b40cd05df39d890daa14376bcb9 (diff) |
PhotoRec: recover Assassin's Creed II .save backup
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/file_list.c | 2 | ||||
-rw-r--r-- | src/file_save.c | 63 |
3 files changed, 66 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 12ac8699..d2423f1e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -210,6 +210,7 @@ file_C = filegen.c \ file_rns.c \ file_rpm.c \ file_rw2.c \ + file_save.c \ file_ses.c \ file_sib.c \ file_sig.c \ diff --git a/src/file_list.c b/src/file_list.c index 63fed3cd..10eb7bc7 100644 --- a/src/file_list.c +++ b/src/file_list.c @@ -212,6 +212,7 @@ extern const file_hint_t file_hint_rm; extern const file_hint_t file_hint_rns; extern const file_hint_t file_hint_rpm; extern const file_hint_t file_hint_rw2; +extern const file_hint_t file_hint_save; extern const file_hint_t file_hint_ses; extern const file_hint_t file_hint_sib; extern const file_hint_t file_hint_sig; @@ -449,6 +450,7 @@ file_enable_t list_file_enable[]= { .enable=0, .file_hint=&file_hint_rns }, { .enable=0, .file_hint=&file_hint_rpm }, { .enable=0, .file_hint=&file_hint_rw2 }, + { .enable=0, .file_hint=&file_hint_save }, { .enable=0, .file_hint=&file_hint_ses }, { .enable=0, .file_hint=&file_hint_sib }, { .enable=0, .file_hint=&file_hint_sit }, diff --git a/src/file_save.c b/src/file_save.c new file mode 100644 index 00000000..b179f961 --- /dev/null +++ b/src/file_save.c @@ -0,0 +1,63 @@ +/* + + File: file_save.c + + Copyright (C) 2011 Christophe GRENIER <[email protected]> + + This software is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write the Free Software Foundation, Inc., 51 + Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#ifdef HAVE_STRING_H +#include <string.h> +#endif +#include <stdio.h> +#include "types.h" +#include "filegen.h" + +static void register_header_check_save(file_stat_t *file_stat); + +const file_hint_t file_hint_save= { + .extension="save", + .description="Assassin's Creed II", + .min_header_distance=0, + .max_filesize=PHOTOREC_MAX_FILE_SIZE, + .recover=1, + .enable_by_default=1, + .register_header_check=®ister_header_check_save +}; + +static const unsigned char save_header[8]= { + 'A' , 0x00, 'C' , 0x00, 'I' , 0x00, 'I' , 0x00 +}; + +static int header_check_save(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], save_header, sizeof(save_header))==0) + { + reset_file_recovery(file_recovery_new); + file_recovery_new->extension=file_hint_save.extension; + return 1; + } + return 0; +} + +static void register_header_check_save(file_stat_t *file_stat) +{ + register_header_check(0, save_header, sizeof(save_header), &header_check_save, file_stat); +} |