summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/phmain.c1
-rw-r--r--src/photorec.h1
-rw-r--r--src/phrecn.c16
-rw-r--r--src/phrecn.h2
-rw-r--r--src/ppartsel.c15
-rw-r--r--src/sessionp.c6
-rw-r--r--src/sessionp.h2
7 files changed, 26 insertions, 17 deletions
diff --git a/src/phmain.c b/src/phmain.c
index 708a302..f0450a7 100644
--- a/src/phmain.c
+++ b/src/phmain.c
@@ -122,6 +122,7 @@ int main( int argc, char **argv )
params.recup_dir=NULL;
params.cmd_device=NULL;
params.cmd_run=NULL;
+ params.carve_free_space_only=0;
/* random (weak is ok) is need fot GPT */
srand(time(NULL));
#ifdef HAVE_SIGACTION
diff --git a/src/photorec.h b/src/photorec.h
index db5d12a..49c15d0 100644
--- a/src/photorec.h
+++ b/src/photorec.h
@@ -44,6 +44,7 @@ struct ph_param
char *cmd_run;
disk_t *disk;
partition_t *partition;
+ unsigned int carve_free_space_only;
unsigned int blocksize;
unsigned int pass;
photorec_status_t status;
diff --git a/src/phrecn.c b/src/phrecn.c
index 3716924..e605584 100644
--- a/src/phrecn.c
+++ b/src/phrecn.c
@@ -150,7 +150,7 @@ static FILE *fopen_with_retry(const char *path, const char *mode)
}
#endif
-static alloc_data_t *file_add_data(alloc_data_t *data, const uint64_t offset, const unsigned int content)
+static inline alloc_data_t *file_add_data(alloc_data_t *data, const uint64_t offset, const unsigned int content)
{
if(!(data->start <= offset && offset <= data->end))
{
@@ -197,6 +197,7 @@ static int photorec_aux(struct ph_param *params, const struct ph_options *option
unsigned char *buffer;
time_t start_time;
time_t previous_time;
+ time_t next_checkpoint;
int ind_stop=0;
unsigned int buffer_size;
const unsigned int blocksize=params->blocksize;
@@ -212,6 +213,7 @@ static int photorec_aux(struct ph_param *params, const struct ph_options *option
buffer=buffer_olddata+blocksize;
start_time=time(NULL);
previous_time=start_time;
+ next_checkpoint=start_time+5*60;
memset(buffer_olddata,0,blocksize);
current_search_space=td_list_entry(list_search_space->list.next, alloc_data_t, list);
offset=set_search_start(params, &current_search_space, list_search_space);
@@ -477,6 +479,12 @@ static int photorec_aux(struct ph_param *params, const struct ph_options *option
params->offset=file_recovery.location.start;
else
params->offset=offset;
+ if(current_time >= next_checkpoint)
+ {
+ /* Save current progress */
+ session_save(list_search_space, params, options);
+ next_checkpoint=current_time+5*60;
+ }
}
}
#endif
@@ -732,7 +740,7 @@ static void test_files(alloc_data_t *list_search_space, struct ph_param *params)
}
#endif
-int photorec(struct ph_param *params, const struct ph_options *options, alloc_data_t *list_search_space, const unsigned int carve_free_space_only)
+int photorec(struct ph_param *params, const struct ph_options *options, alloc_data_t *list_search_space)
{
int ind_stop=0;
const unsigned int blocksize_is_known=params->blocksize;
@@ -873,7 +881,7 @@ int photorec(struct ph_param *params, const struct ph_options *options, alloc_da
{
ind_stop=photorec_aux(params, options, list_search_space);
}
- session_save(list_search_space, params, options, carve_free_space_only);
+ session_save(list_search_space, params, options);
if(ind_stop==3)
{ /* no more space */
@@ -913,7 +921,7 @@ int photorec(struct ph_param *params, const struct ph_options *options, alloc_da
}
else if(ind_stop==1)
{
- if(session_save(list_search_space, params, options, carve_free_space_only) < 0)
+ if(session_save(list_search_space, params, options) < 0)
{
/* Failed to save the session! */
#ifdef HAVE_NCURSES
diff --git a/src/phrecn.h b/src/phrecn.h
index 07b1d99..2490f8d 100644
--- a/src/phrecn.h
+++ b/src/phrecn.h
@@ -23,7 +23,7 @@
extern "C" {
#endif
-int photorec(struct ph_param *params, const struct ph_options *options, alloc_data_t *list_search_space, const unsigned int carve_free_space_only);
+int photorec(struct ph_param *params, const struct ph_options *options, alloc_data_t *list_search_space);
void interface_file_select(file_enable_t *files_enable, char**current_cmd);
void interface_options_photorec(struct ph_options *options, char**current_cmd);
diff --git a/src/ppartsel.c b/src/ppartsel.c
index f975971..7a123df 100644
--- a/src/ppartsel.c
+++ b/src/ppartsel.c
@@ -79,7 +79,6 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da
list_part_t *list_part;
list_part_t *current_element;
unsigned int current_element_num;
- unsigned int carve_free_space_only=0;
unsigned int user_blocksize=0;
int done=0;
int mode_init_space=(td_list_empty(&list_search_space->list)?INIT_SPACE_WHOLE:INIT_SPACE_PREINIT);
@@ -178,13 +177,13 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da
{
init_search_space(list_search_space, params->disk, params->partition);
}
- if(carve_free_space_only>0)
+ if(params->carve_free_space_only>0)
{
params->blocksize=remove_used_space(params->disk, params->partition, list_search_space);
}
if(user_blocksize > 0)
params->blocksize=user_blocksize;
- photorec(params, options, list_search_space, carve_free_space_only);
+ photorec(params, options, list_search_space);
}
}
else if(strncmp(params->cmd_run,"options",7)==0)
@@ -216,12 +215,12 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da
else if(strncmp(params->cmd_run,"wholespace",10)==0)
{
params->cmd_run+=10;
- carve_free_space_only=0;
+ params->carve_free_space_only=0;
}
else if(strncmp(params->cmd_run,"freespace",9)==0)
{
params->cmd_run+=9;
- carve_free_space_only=1;
+ params->carve_free_space_only=1;
}
else if(strncmp(params->cmd_run,"ext2_group,",11)==0)
{
@@ -387,7 +386,7 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da
if(current_element!=NULL)
{
params->partition=current_element->part;
- ask_mode_ext2(params->disk, params->partition, &options->mode_ext2, &carve_free_space_only);
+ ask_mode_ext2(params->disk, params->partition, &options->mode_ext2, &params->carve_free_space_only);
menu=0;
if(params->recup_dir==NULL)
{
@@ -408,7 +407,7 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da
{
init_search_space(list_search_space, params->disk, params->partition);
}
- if(carve_free_space_only>0)
+ if(params->carve_free_space_only>0)
{
aff_copy(stdscr);
wmove(stdscr,5,0);
@@ -419,7 +418,7 @@ void menu_photorec(struct ph_param *params, struct ph_options *options, alloc_da
* To carve the whole space, need to quit and reselect the params->partition */
done = 1;
}
- photorec(params, options, list_search_space, carve_free_space_only);
+ photorec(params, options, list_search_space);
}
}
break;
diff --git a/src/sessionp.c b/src/sessionp.c
index a3ff8c4..0abfcec 100644
--- a/src/sessionp.c
+++ b/src/sessionp.c
@@ -67,7 +67,7 @@ int session_load(char **cmd_device, char **current_cmd, alloc_data_t *list_free_
if(!f_session)
{
log_info("Can't open photorec.ses file: %s\n",strerror(errno));
- session_save(NULL, NULL, NULL, 0);
+ session_save(NULL, NULL, NULL);
return -1;
}
if(fstat(fileno(f_session), &stat_rec)<0)
@@ -158,7 +158,7 @@ int session_load(char **cmd_device, char **current_cmd, alloc_data_t *list_free_
}
}
-int session_save(alloc_data_t *list_free_space, struct ph_param *params, const struct ph_options *options, const unsigned int carve_free_space_only)
+int session_save(alloc_data_t *list_free_space, struct ph_param *params, const struct ph_options *options)
{
FILE *f_session;
f_session=fopen(SESSION_FILENAME,"wb");
@@ -248,7 +248,7 @@ int session_save(alloc_data_t *list_free_space, struct ph_param *params, const
if(options->lowmem>0)
fprintf(f_session, "lowmem,");
/* Save options - End */
- if(carve_free_space_only>0)
+ if(params->carve_free_space_only>0)
fprintf(f_session,"freespace,");
else
fprintf(f_session,"wholespace,");
diff --git a/src/sessionp.h b/src/sessionp.h
index ce06b4f..e3b2073 100644
--- a/src/sessionp.h
+++ b/src/sessionp.h
@@ -24,7 +24,7 @@ extern "C" {
#endif
int session_load(char **cmd_device, char **current_cmd, alloc_data_t *list_free_space);
-int session_save(alloc_data_t *list_free_space, struct ph_param *params, const struct ph_options *options, const unsigned int carve_free_space_only);
+int session_save(alloc_data_t *list_free_space, struct ph_param *params, const struct ph_options *options);
#ifdef __cplusplus
} /* closing brace for extern "C" */