summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Grenier <[email protected]>2007-12-28 18:49:47 +0100
committerChristophe Grenier <[email protected]>2007-12-28 18:49:47 +0100
commit2af8072225804ae699fbb6dfa0c4f39935c47201 (patch)
tree43026377ec8817f91ec9ce9644618e7da911d63d
parent49e7e8a2571f0d1bbae7b21c76ed6a8d160f4718 (diff)
Add new parameter to enable/disable all filetype recovery: photorec /cmd device ...,fileopts,everything,disable"
MPG recovery: check size defined by video sequence start code
-rw-r--r--src/file_doc.c2
-rw-r--r--src/file_mpg.c4
-rw-r--r--src/phrecn.c46
3 files changed, 41 insertions, 11 deletions
diff --git a/src/file_doc.c b/src/file_doc.c
index 6577d542..8b76fd31 100644
--- a/src/file_doc.c
+++ b/src/file_doc.c
@@ -146,7 +146,7 @@ static int header_check_doc(const unsigned char *buffer, const unsigned int buff
file_recovery_new->extension="pub";
}
else if(td_memmem(buffer,buffer_size,"C\0O\0N\0T\0E\0N\0T\0S\0",16)!=NULL)
- {
+ { /* Microsoft Works .wps */
file_recovery_new->extension="wps";
}
else if(td_memmem(buffer,buffer_size,"MetaStock",9)!=NULL)
diff --git a/src/file_mpg.c b/src/file_mpg.c
index 9cf6d913..c16aabf6 100644
--- a/src/file_mpg.c
+++ b/src/file_mpg.c
@@ -72,7 +72,9 @@ static int header_check_mpg(const unsigned char *buffer, const unsigned int buff
* 0x000001B5 visual object start code */
if(buffer[0]==0x00 && buffer[1]==0x00 && buffer[2]==0x01 &&
- (buffer[3]==0xB0 || buffer[3]==0xB3 || buffer[3]==0xB5 || buffer[3]==0xBA || buffer[3]==0xBB))
+ (buffer[3]==0xB0 ||
+ (buffer[3]==0xB3 && ((buffer[4]<<8)+(buffer[5]>>8)>0) && ((buffer[5]<<8)+buffer[6]>0)) ||
+ buffer[3]==0xB5 || buffer[3]==0xBA || buffer[3]==0xBB))
{
reset_file_recovery(file_recovery_new);
file_recovery_new->extension=file_hint_mpg.extension;
diff --git a/src/phrecn.c b/src/phrecn.c
index c9ff0e44..9c27b621 100644
--- a/src/phrecn.c
+++ b/src/phrecn.c
@@ -2119,32 +2119,59 @@ static void interface_file_select(file_enable_t *files_enable, char**current_cmd
int keep_asking;
do
{
- unsigned int cmd_length=0;
- int i;
+ file_enable_t *file_enable;
keep_asking=0;
while(*current_cmd[0]==',')
(*current_cmd)++;
+ if(strncmp(*current_cmd,"everything",10)==0)
+ {
+ int enable_status;
+ keep_asking=1;
+ (*current_cmd)+=10;
+ while(*current_cmd[0]==',')
+ (*current_cmd)++;
+ if(strncmp(*current_cmd,"enable",6)==0)
+ {
+ (*current_cmd)+=6;
+ enable_status=1;
+ }
+ else if(strncmp(*current_cmd,"disable",7)==0)
+ {
+ (*current_cmd)+=7;
+ enable_status=0;
+ }
+ else
+ {
+ log_critical("Syntax error %s\n",*current_cmd);
+ return;
+ }
+ for(file_enable=&files_enable[0];file_enable->file_hint!=NULL;file_enable++)
+ file_enable->enable=enable_status;
+ }
+ else
+ {
+ unsigned int cmd_length=0;
while((*current_cmd)[cmd_length]!='\0' && (*current_cmd)[cmd_length]!=',')
cmd_length++;
- for(i=0;files_enable[i].file_hint!=NULL;i++)
+ for(file_enable=&files_enable[0];file_enable->file_hint!=NULL;file_enable++)
{
- if(files_enable[i].file_hint->extension!=NULL &&
- strncmp(files_enable[i].file_hint->extension,*current_cmd,cmd_length)==0)
+ if(file_enable->file_hint->extension!=NULL &&
+ strlen(file_enable->file_hint->extension)==cmd_length &&
+ memcmp(file_enable->file_hint->extension,*current_cmd,cmd_length)==0)
{
keep_asking=1;
- while(*current_cmd[0]!='\0' && *current_cmd[0]!=',')
- (*current_cmd)++;
+ (*current_cmd)+=cmd_length;
while(*current_cmd[0]==',')
(*current_cmd)++;
if(strncmp(*current_cmd,"enable",6)==0)
{
(*current_cmd)+=6;
- files_enable[i].enable=1;
+ file_enable->enable=1;
}
else if(strncmp(*current_cmd,"disable",7)==0)
{
(*current_cmd)+=7;
- files_enable[i].enable=0;
+ file_enable->enable=0;
}
else
{
@@ -2153,6 +2180,7 @@ static void interface_file_select(file_enable_t *files_enable, char**current_cmd
}
}
}
+ }
} while(keep_asking>0);
return;
}