diff options
author | Christophe Grenier <[email protected]> | 2007-12-28 18:49:47 +0100 |
---|---|---|
committer | Christophe Grenier <[email protected]> | 2007-12-28 18:49:47 +0100 |
commit | 2af8072225804ae699fbb6dfa0c4f39935c47201 (patch) | |
tree | 43026377ec8817f91ec9ce9644618e7da911d63d | |
parent | 49e7e8a2571f0d1bbae7b21c76ed6a8d160f4718 (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.c | 2 | ||||
-rw-r--r-- | src/file_mpg.c | 4 | ||||
-rw-r--r-- | src/phrecn.c | 46 |
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; } |