summaryrefslogtreecommitdiffstats
path: root/src/file_dxf.c
diff options
context:
space:
mode:
authorChristophe Grenier <grenier@cgsecurity.org>2014-07-26 15:50:07 +0200
committerChristophe Grenier <grenier@cgsecurity.org>2014-07-26 15:50:07 +0200
commita67f0c1cedcaa4dd2929b6f16b46d8221ddb67d4 (patch)
treefc8633f4c1153a70b59c1bca599e12e86451fbb3 /src/file_dxf.c
parent03ac352e4f815c937b28b3ae6625ebf12dd97a60 (diff)
PhotoRec: code cleanup for .dxf recovery
Diffstat (limited to 'src/file_dxf.c')
-rw-r--r--src/file_dxf.c51
1 files changed, 23 insertions, 28 deletions
diff --git a/src/file_dxf.c b/src/file_dxf.c
index 663a9f6..7dc4018 100644
--- a/src/file_dxf.c
+++ b/src/file_dxf.c
@@ -32,7 +32,6 @@
#include "filegen.h"
static void register_header_check_dxf(file_stat_t *file_stat);
-static int header_check_dxf(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);
static data_check_t data_check_dxf(const unsigned char *buffer, const unsigned int buffer_size, file_recovery_t *file_recovery);
static void file_check_dxf(file_recovery_t *file_recovery);
@@ -46,43 +45,22 @@ const file_hint_t file_hint_dxf= {
.register_header_check=&register_header_check_dxf
};
-static const unsigned char header_dxflib[10]= {'9', '9', '9', '\n',
- 'd', 'x', 'f', 'l', 'i', 'b'};
-static const unsigned char header_dxflib_dos[11]= {'9', '9', '9', '\r', '\n',
- 'd', 'x', 'f', 'l', 'i', 'b'};
-static const unsigned char header_dxf[11]= {' ', ' ', '0', '\n',
- 'S', 'E', 'C', 'T', 'I', 'O', 'N'};
-static const unsigned char header_dxf_dos[12]= {' ', ' ', '0', '\r', '\n',
- 'S', 'E', 'C', 'T', 'I', 'O', 'N'};
-
-static void register_header_check_dxf(file_stat_t *file_stat)
-{
- register_header_check(0, header_dxf, sizeof(header_dxf), &header_check_dxf, file_stat);
- register_header_check(0, header_dxf_dos, sizeof(header_dxf_dos), &header_check_dxf, file_stat);
- register_header_check(0, header_dxflib, sizeof(header_dxflib), &header_check_dxf, file_stat);
- register_header_check(0, header_dxflib_dos, sizeof(header_dxflib_dos), &header_check_dxf, file_stat);
-}
-
static int header_check_dxf(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, header_dxf, sizeof(header_dxf))==0 ||
- memcmp(buffer, header_dxf_dos, sizeof(header_dxf_dos))==0 ||
- memcmp(buffer, header_dxflib, sizeof(header_dxflib))==0 ||
- memcmp(buffer, header_dxflib_dos, sizeof(header_dxflib_dos))==0)
+ reset_file_recovery(file_recovery_new);
+ file_recovery_new->extension=file_hint_dxf.extension;
+ file_recovery_new->file_check=&file_check_dxf;
+ if(file_recovery_new->blocksize >= 3)
{
- reset_file_recovery(file_recovery_new);
- file_recovery_new->extension=file_hint_dxf.extension;
file_recovery_new->data_check=&data_check_dxf;
- file_recovery_new->file_check=&file_check_dxf;
- return 1;
}
- return 0;
+ return 1;
}
static data_check_t data_check_dxf(const unsigned char *buffer, const unsigned int buffer_size, file_recovery_t *file_recovery)
{
unsigned int i;
- for(i=(buffer_size/2)-3;i+3<buffer_size;i++)
+ for(i=(buffer_size/2)-3;i+4<buffer_size;i++)
{
if(buffer[i]=='\n' && buffer[i+1]=='E' && buffer[i+2]=='O' && buffer[i+3]=='F')
{
@@ -100,3 +78,20 @@ static void file_check_dxf(file_recovery_t *file_recovery)
file_search_footer(file_recovery, dxf_footer, sizeof(dxf_footer), 0);
file_allow_nl(file_recovery, NL_BARENL|NL_CRLF);
}
+
+static void register_header_check_dxf(file_stat_t *file_stat)
+{
+ static const unsigned char header_dxflib[10]= {'9', '9', '9', '\n',
+ 'd', 'x', 'f', 'l', 'i', 'b'};
+ static const unsigned char header_dxflib_dos[11]= {'9', '9', '9', '\r', '\n',
+ 'd', 'x', 'f', 'l', 'i', 'b'};
+ static const unsigned char header_dxf[11]= {' ', ' ', '0', '\n',
+ 'S', 'E', 'C', 'T', 'I', 'O', 'N'};
+ static const unsigned char header_dxf_dos[12]= {' ', ' ', '0', '\r', '\n',
+ 'S', 'E', 'C', 'T', 'I', 'O', 'N'};
+
+ register_header_check(0, header_dxf, sizeof(header_dxf), &header_check_dxf, file_stat);
+ register_header_check(0, header_dxf_dos, sizeof(header_dxf_dos), &header_check_dxf, file_stat);
+ register_header_check(0, header_dxflib, sizeof(header_dxflib), &header_check_dxf, file_stat);
+ register_header_check(0, header_dxflib_dos, sizeof(header_dxflib_dos), &header_check_dxf, file_stat);
+}