diff --git a/src/fat_unformat.c b/src/fat_unformat.c index 10b164e3..2bae8241 100644 --- a/src/fat_unformat.c +++ b/src/fat_unformat.c @@ -215,7 +215,6 @@ static pstatus_t fat_unformat_aux(struct ph_param *params, const struct ph_optio const unsigned int cluster_size=params->blocksize; const unsigned int read_size=(cluster_size>65536?cluster_size:65536); alloc_data_t *current_search_space; - file_recovery_t file_recovery; disk_t *disk=params->disk; const partition_t *partition=params->partition; const unsigned long int no_of_cluster=(partition->part_size - start_data) / cluster_size; @@ -224,8 +223,6 @@ static pstatus_t fat_unformat_aux(struct ph_param *params, const struct ph_optio #ifdef HAVE_NCURSES aff_copy(stdscr); #endif - reset_file_recovery(&file_recovery); - file_recovery.blocksize=cluster_size; start_time=time(NULL); previous_time=start_time; current_search_space=td_list_last_entry(&list_search_space->list, alloc_data_t, list); diff --git a/src/phcli.c b/src/phcli.c index ebb106ee..91af3396 100644 --- a/src/phcli.c +++ b/src/phcli.c @@ -174,6 +174,8 @@ int menu_photorec_cli(list_part_t *list_part, struct ph_param *params, struct ph { params->cmd_run+=7; interface_options_photorec_cli(options, ¶ms->cmd_run); + /* So we get it downstream in file_finish_*. */ + params->report_only=options->report_only; } else if(strncmp(params->cmd_run,"fileopt",7)==0) { diff --git a/src/phmain.c b/src/phmain.c index 2c1a7e3d..838689a0 100644 --- a/src/phmain.c +++ b/src/phmain.c @@ -142,13 +142,15 @@ int main( int argc, char **argv ) .expert=0, .lowmem=0, .verbose=0, - .list_file_format=list_file_enable + .list_file_format=list_file_enable, + .report_only=0 }; struct ph_param params; params.recup_dir=NULL; params.cmd_device=NULL; params.cmd_run=NULL; params.carve_free_space_only=0; + params.report_only=0; /* random (weak is ok) is need fot GPT */ srand(time(NULL)); #ifdef HAVE_SIGACTION diff --git a/src/photorec.c b/src/photorec.c index 68c81592..4ee28d8d 100644 --- a/src/photorec.c +++ b/src/photorec.c @@ -565,6 +565,8 @@ static void file_finish_aux(file_recovery_t *file_recovery, struct ph_param *par set_date(file_recovery->filename, file_recovery->time, file_recovery->time); if(file_recovery->file_rename!=NULL) file_recovery->file_rename(file_recovery); + if(params->report_only) + unlink(file_recovery->filename); if((++params->file_nbr)%MAX_FILES_PER_DIR==0) { params->dir_num=photorec_mkdir(params->recup_dir, params->dir_num+1); diff --git a/src/photorec.h b/src/photorec.h index 4aa30e0f..4ab5e0d9 100644 --- a/src/photorec.h +++ b/src/photorec.h @@ -38,6 +38,7 @@ struct ph_options { int paranoid; int keep_corrupted_file; + int report_only; unsigned int mode_ext2; unsigned int expert; unsigned int lowmem; @@ -51,6 +52,7 @@ struct ph_param char *cmd_run; disk_t *disk; partition_t *partition; + int report_only; unsigned int carve_free_space_only; unsigned int blocksize; unsigned int pass; diff --git a/src/phrecn.c b/src/phrecn.c index 9057632f..a73e8bb7 100644 --- a/src/phrecn.c +++ b/src/phrecn.c @@ -494,7 +494,7 @@ int photorec(struct ph_param *params, const struct ph_options *options, alloc_da #ifdef HAVE_NCURSES void interface_options_photorec_ncurses(struct ph_options *options) { - unsigned int menu = 5; + unsigned int menu = 6; struct MenuItem menuOptions[]= { { 'P', NULL, "Check JPG files" }, @@ -502,6 +502,7 @@ void interface_options_photorec_ncurses(struct ph_options *options) { 'S',NULL,"Try to skip indirect block"}, { 'E',NULL,"Provide additional controls"}, { 'L',NULL,"Low memory"}, + { 'R',NULL,"Report only - don't recover files"}, { 'Q',"Quit","Return to main menu"}, { 0, NULL, NULL } }; @@ -525,8 +526,9 @@ void interface_options_photorec_ncurses(struct ph_options *options) menuOptions[2].name=options->mode_ext2?"ext2/ext3 mode: Yes":"ext2/ext3 mode : No"; menuOptions[3].name=options->expert?"Expert mode : Yes":"Expert mode : No"; menuOptions[4].name=options->lowmem?"Low memory: Yes":"Low memory: No"; + menuOptions[5].name=options->report_only?"Report only - don't recover files: Yes":"Report only - don't recover files: No"; aff_copy(stdscr); - car=wmenuSelect_ext(stdscr, 23, INTER_OPTION_Y, INTER_OPTION_X, menuOptions, 0, "PKELQ", MENU_VERT|MENU_VERT_ARROW2VALID, &menu,&real_key); + car=wmenuSelect_ext(stdscr, 23, INTER_OPTION_Y, INTER_OPTION_X, menuOptions, 0, "PKELRQ", MENU_VERT|MENU_VERT_ARROW2VALID, &menu,&real_key); switch(car) { case 'p': @@ -552,6 +554,10 @@ void interface_options_photorec_ncurses(struct ph_options *options) case 'L': options->lowmem=!options->lowmem; break; + case 'r': + case 'R': + options->report_only=!options->report_only; + break; case key_ESC: case 'q': case 'Q': diff --git a/src/poptions.c b/src/poptions.c index 9105a14b..af40bc15 100644 --- a/src/poptions.c +++ b/src/poptions.c @@ -87,6 +87,12 @@ void interface_options_photorec_cli(struct ph_options *options, char **current_c (*current_cmd)+=6; options->lowmem=1; } + /* report_only */ + else if(strncmp(*current_cmd,"report_only",11)==0) + { + (*current_cmd)+=11; + options->report_only=1; + } else { interface_options_photorec_log(options); @@ -100,9 +106,10 @@ void interface_options_photorec_log(const struct ph_options *options) /* write new options to log file */ log_info("New options :\n Paranoid : %s\n", options->paranoid?"Yes":"No"); log_info(" Brute force : %s\n", ((options->paranoid)>1?"Yes":"No")); - log_info(" Keep corrupted files : %s\n ext2/ext3 mode : %s\n Expert mode : %s\n Low memory : %s\n", + log_info(" Keep corrupted files : %s\n ext2/ext3 mode : %s\n Expert mode : %s\n Low memory : %s\n Report only : %s\n", options->keep_corrupted_file?"Yes":"No", options->mode_ext2?"Yes":"No", options->expert?"Yes":"No", - options->lowmem?"Yes":"No"); + options->lowmem?"Yes":"No", + options->report_only?"Yes":"No"); } diff --git a/src/ppartseln.c b/src/ppartseln.c index e134f1b2..9e854a4c 100644 --- a/src/ppartseln.c +++ b/src/ppartseln.c @@ -284,6 +284,8 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da case 'O': { interface_options_photorec_ncurses(options); + /* So we get it downstream in file_finish_*. */ + params->report_only=options->report_only; menu=1; } break; diff --git a/src/qphotorec.cpp b/src/qphotorec.cpp index f3a44f5f..059c765e 100644 --- a/src/qphotorec.cpp +++ b/src/qphotorec.cpp @@ -115,6 +115,7 @@ QPhotorec::QPhotorec(QWidget *my_parent) : QWidget(my_parent) options->mode_ext2=0; options->expert=0; options->lowmem=0; + options->report_only=0; options->verbose=0; options->list_file_format=list_file_enable; reset_list_file_enable(options->list_file_format); diff --git a/src/sessionp.c b/src/sessionp.c index 29024293..1e22678b 100644 --- a/src/sessionp.c +++ b/src/sessionp.c @@ -253,6 +253,8 @@ int session_save(alloc_data_t *list_free_space, struct ph_param *params, const fprintf(f_session, "expert,"); if(options->lowmem>0) fprintf(f_session, "lowmem,"); + if(options->report_only>0) + fprintf(f_session, "report_only,"); /* Save options - End */ if(params->carve_free_space_only>0) fprintf(f_session,"freespace,");