Lines 223-236
Link Here
|
223 |
|
223 |
|
224 |
static void list_free_add(const file_recovery_t *file_recovery, alloc_data_t *list_search_space) |
224 |
static void list_free_add(const file_recovery_t *file_recovery, alloc_data_t *list_search_space) |
225 |
{ |
225 |
{ |
226 |
struct list_head *search_walker = NULL; |
226 |
struct td_list_head *search_walker = NULL; |
227 |
#ifdef DEBUG_FREE |
227 |
#ifdef DEBUG_FREE |
228 |
log_trace("list_free_add %lu\n",(long unsigned)(file_recovery->location.start/512)); |
228 |
log_trace("list_free_add %lu\n",(long unsigned)(file_recovery->location.start/512)); |
229 |
#endif |
229 |
#endif |
230 |
list_for_each(search_walker, &list_search_space->list) |
230 |
td_list_for_each(search_walker, &list_search_space->list) |
231 |
{ |
231 |
{ |
232 |
alloc_data_t *current_search_space; |
232 |
alloc_data_t *current_search_space; |
233 |
current_search_space=list_entry(search_walker, alloc_data_t, list); |
233 |
current_search_space=td_list_entry(search_walker, alloc_data_t, list); |
234 |
if(current_search_space->start < file_recovery->location.start && file_recovery->location.start < current_search_space->end) |
234 |
if(current_search_space->start < file_recovery->location.start && file_recovery->location.start < current_search_space->end) |
235 |
{ |
235 |
{ |
236 |
alloc_data_t *new_free_space; |
236 |
alloc_data_t *new_free_space; |
Lines 239-245
Link Here
|
239 |
new_free_space->end=current_search_space->end; |
239 |
new_free_space->end=current_search_space->end; |
240 |
new_free_space->file_stat=NULL; |
240 |
new_free_space->file_stat=NULL; |
241 |
current_search_space->end=file_recovery->location.start-1; |
241 |
current_search_space->end=file_recovery->location.start-1; |
242 |
list_add(&new_free_space->list, search_walker); |
242 |
td_list_add(&new_free_space->list, search_walker); |
243 |
} |
243 |
} |
244 |
if(current_search_space->start==file_recovery->location.start) |
244 |
if(current_search_space->start==file_recovery->location.start) |
245 |
{ |
245 |
{ |
Lines 252-273
Link Here
|
252 |
static alloc_data_t *update_search_space(const file_recovery_t *file_recovery, alloc_data_t *list_search_space, alloc_data_t **new_current_search_space, uint64_t *offset, const unsigned int blocksize) |
252 |
static alloc_data_t *update_search_space(const file_recovery_t *file_recovery, alloc_data_t *list_search_space, alloc_data_t **new_current_search_space, uint64_t *offset, const unsigned int blocksize) |
253 |
{ |
253 |
{ |
254 |
const alloc_list_t *element; |
254 |
const alloc_list_t *element; |
255 |
struct list_head *search_walker = NULL; |
255 |
struct td_list_head *search_walker = NULL; |
256 |
#ifdef DEBUG_UPDATE_SEARCH_SPACE |
256 |
#ifdef DEBUG_UPDATE_SEARCH_SPACE |
257 |
log_trace("update_search_space\n"); |
257 |
log_trace("update_search_space\n"); |
258 |
list_for_each(search_walker, &list_search_space->list) |
258 |
td_list_for_each(search_walker, &list_search_space->list) |
259 |
{ |
259 |
{ |
260 |
alloc_data_t *cur_free_space; |
260 |
alloc_data_t *cur_free_space; |
261 |
cur_free_space=list_entry(search_walker, alloc_data_t, list); |
261 |
cur_free_space=td_list_entry(search_walker, alloc_data_t, list); |
262 |
log_trace(" %llu-%llu",(long long unsigned)(cur_free_space->start/512), |
262 |
log_trace(" %llu-%llu",(long long unsigned)(cur_free_space->start/512), |
263 |
(long long unsigned)(cur_free_space->end/512)); |
263 |
(long long unsigned)(cur_free_space->end/512)); |
264 |
} |
264 |
} |
265 |
log_trace("\n"); |
265 |
log_trace("\n"); |
266 |
#endif |
266 |
#endif |
267 |
list_for_each(search_walker, &list_search_space->list) |
267 |
td_list_for_each(search_walker, &list_search_space->list) |
268 |
{ |
268 |
{ |
269 |
alloc_data_t *current_search_space; |
269 |
alloc_data_t *current_search_space; |
270 |
current_search_space=list_entry(search_walker, alloc_data_t, list); |
270 |
current_search_space=td_list_entry(search_walker, alloc_data_t, list); |
271 |
if(current_search_space->start <= file_recovery->location.start && |
271 |
if(current_search_space->start <= file_recovery->location.start && |
272 |
file_recovery->location.start <= current_search_space->end) |
272 |
file_recovery->location.start <= current_search_space->end) |
273 |
{ |
273 |
{ |
Lines 291-297
Link Here
|
291 |
|
291 |
|
292 |
static alloc_data_t *update_search_space_aux(alloc_data_t *list_search_space, uint64_t start, uint64_t end, alloc_data_t **new_current_search_space, uint64_t *offset) |
292 |
static alloc_data_t *update_search_space_aux(alloc_data_t *list_search_space, uint64_t start, uint64_t end, alloc_data_t **new_current_search_space, uint64_t *offset) |
293 |
{ |
293 |
{ |
294 |
struct list_head *search_walker = NULL; |
294 |
struct td_list_head *search_walker = NULL; |
295 |
#ifdef DEBUG_UPDATE_SEARCH_SPACE |
295 |
#ifdef DEBUG_UPDATE_SEARCH_SPACE |
296 |
log_trace("update_search_space_aux offset=%llu remove [%llu-%llu]\n", |
296 |
log_trace("update_search_space_aux offset=%llu remove [%llu-%llu]\n", |
297 |
(long long unsigned)((*offset)/512), |
297 |
(long long unsigned)((*offset)/512), |
Lines 300-309
Link Here
|
300 |
#endif |
300 |
#endif |
301 |
if(start >= end) |
301 |
if(start >= end) |
302 |
return list_search_space; |
302 |
return list_search_space; |
303 |
list_for_each(search_walker, &list_search_space->list) |
303 |
td_list_for_each(search_walker, &list_search_space->list) |
304 |
{ |
304 |
{ |
305 |
alloc_data_t *current_search_space; |
305 |
alloc_data_t *current_search_space; |
306 |
current_search_space=list_entry(search_walker, alloc_data_t, list); |
306 |
current_search_space=td_list_entry(search_walker, alloc_data_t, list); |
307 |
#ifdef DEBUG_UPDATE_SEARCH_SPACE |
307 |
#ifdef DEBUG_UPDATE_SEARCH_SPACE |
308 |
log_trace("update_search_space_aux offset=%llu remove [%llu-%llu] in [%llu-%llu]\n", |
308 |
log_trace("update_search_space_aux offset=%llu remove [%llu-%llu] in [%llu-%llu]\n", |
309 |
(long long unsigned)((*offset)/512), |
309 |
(long long unsigned)((*offset)/512), |
Lines 328-341
Link Here
|
328 |
/* current_search_space->start==start current_search_space->end<=end */ |
328 |
/* current_search_space->start==start current_search_space->end<=end */ |
329 |
start=current_search_space->end+1; |
329 |
start=current_search_space->end+1; |
330 |
if(list_search_space==current_search_space) |
330 |
if(list_search_space==current_search_space) |
331 |
list_search_space=list_entry(current_search_space->list.next, alloc_data_t, list); |
331 |
list_search_space=td_list_entry(current_search_space->list.next, alloc_data_t, list); |
332 |
if(offset!=NULL && new_current_search_space!=NULL && |
332 |
if(offset!=NULL && new_current_search_space!=NULL && |
333 |
current_search_space->start<=*offset && *offset<=current_search_space->end) |
333 |
current_search_space->start<=*offset && *offset<=current_search_space->end) |
334 |
{ |
334 |
{ |
335 |
*new_current_search_space=list_entry(current_search_space->list.next, alloc_data_t, list); |
335 |
*new_current_search_space=td_list_entry(current_search_space->list.next, alloc_data_t, list); |
336 |
*offset=(*new_current_search_space)->start; |
336 |
*offset=(*new_current_search_space)->start; |
337 |
} |
337 |
} |
338 |
list_del(search_walker); |
338 |
td_list_del(search_walker); |
339 |
free(current_search_space); |
339 |
free(current_search_space); |
340 |
return update_search_space_aux(list_search_space, start,end, new_current_search_space, offset); |
340 |
return update_search_space_aux(list_search_space, start,end, new_current_search_space, offset); |
341 |
} |
341 |
} |
Lines 349-355
Link Here
|
349 |
if(offset!=NULL && new_current_search_space!=NULL && |
349 |
if(offset!=NULL && new_current_search_space!=NULL && |
350 |
start<=*offset && *offset<=current_search_space->end) |
350 |
start<=*offset && *offset<=current_search_space->end) |
351 |
{ |
351 |
{ |
352 |
*new_current_search_space=list_entry(current_search_space->list.next, alloc_data_t, list); |
352 |
*new_current_search_space=td_list_entry(current_search_space->list.next, alloc_data_t, list); |
353 |
*offset=(*new_current_search_space)->start; |
353 |
*offset=(*new_current_search_space)->start; |
354 |
} |
354 |
} |
355 |
current_search_space->end=start-1; |
355 |
current_search_space->end=start-1; |
Lines 358-371
Link Here
|
358 |
/* start<=current_search_space->start current_search_space->end==end */ |
358 |
/* start<=current_search_space->start current_search_space->end==end */ |
359 |
end=current_search_space->start-1; |
359 |
end=current_search_space->start-1; |
360 |
if(list_search_space==current_search_space) |
360 |
if(list_search_space==current_search_space) |
361 |
list_search_space=list_entry(current_search_space->list.next, alloc_data_t, list); |
361 |
list_search_space=td_list_entry(current_search_space->list.next, alloc_data_t, list); |
362 |
if(offset!=NULL && new_current_search_space!=NULL && |
362 |
if(offset!=NULL && new_current_search_space!=NULL && |
363 |
current_search_space->start<=*offset && *offset<=current_search_space->end) |
363 |
current_search_space->start<=*offset && *offset<=current_search_space->end) |
364 |
{ |
364 |
{ |
365 |
*new_current_search_space=list_entry(current_search_space->list.next, alloc_data_t, list); |
365 |
*new_current_search_space=td_list_entry(current_search_space->list.next, alloc_data_t, list); |
366 |
*offset=(*new_current_search_space)->start; |
366 |
*offset=(*new_current_search_space)->start; |
367 |
} |
367 |
} |
368 |
list_del(search_walker); |
368 |
td_list_del(search_walker); |
369 |
free(current_search_space); |
369 |
free(current_search_space); |
370 |
return update_search_space_aux(list_search_space, start,end, new_current_search_space, offset); |
370 |
return update_search_space_aux(list_search_space, start,end, new_current_search_space, offset); |
371 |
} |
371 |
} |
Lines 388-394
Link Here
|
388 |
new_free_space->end=current_search_space->end; |
388 |
new_free_space->end=current_search_space->end; |
389 |
new_free_space->file_stat=NULL; |
389 |
new_free_space->file_stat=NULL; |
390 |
current_search_space->end=start-1; |
390 |
current_search_space->end=start-1; |
391 |
list_add(&new_free_space->list,search_walker); |
391 |
td_list_add(&new_free_space->list,search_walker); |
392 |
if(offset!=NULL && new_current_search_space!=NULL && |
392 |
if(offset!=NULL && new_current_search_space!=NULL && |
393 |
new_free_space->start<=*offset && *offset<=new_free_space->end) |
393 |
new_free_space->start<=*offset && *offset<=new_free_space->end) |
394 |
{ |
394 |
{ |
Lines 418-430
Link Here
|
418 |
|
418 |
|
419 |
void free_list_search_space(alloc_data_t *list_search_space) |
419 |
void free_list_search_space(alloc_data_t *list_search_space) |
420 |
{ |
420 |
{ |
421 |
struct list_head *search_walker = NULL; |
421 |
struct td_list_head *search_walker = NULL; |
422 |
struct list_head *search_walker_next = NULL; |
422 |
struct td_list_head *search_walker_next = NULL; |
423 |
list_for_each_safe(search_walker,search_walker_next,&list_search_space->list) |
423 |
td_list_for_each_safe(search_walker,search_walker_next,&list_search_space->list) |
424 |
{ |
424 |
{ |
425 |
alloc_data_t *current_search_space; |
425 |
alloc_data_t *current_search_space; |
426 |
current_search_space=list_entry(search_walker, alloc_data_t, list); |
426 |
current_search_space=td_list_entry(search_walker, alloc_data_t, list); |
427 |
list_del(search_walker); |
427 |
td_list_del(search_walker); |
428 |
free(current_search_space); |
428 |
free(current_search_space); |
429 |
} |
429 |
} |
430 |
} |
430 |
} |
Lines 514-520
Link Here
|
514 |
static void get_prev_header(alloc_data_t *list_search_space, alloc_data_t **current_search_space, uint64_t *offset) |
514 |
static void get_prev_header(alloc_data_t *list_search_space, alloc_data_t **current_search_space, uint64_t *offset) |
515 |
{ |
515 |
{ |
516 |
if((*current_search_space) != list_search_space) |
516 |
if((*current_search_space) != list_search_space) |
517 |
*current_search_space=list_entry((*current_search_space)->list.prev, alloc_data_t, list); |
517 |
*current_search_space=td_list_entry((*current_search_space)->list.prev, alloc_data_t, list); |
518 |
*offset=(*current_search_space)->start; |
518 |
*offset=(*current_search_space)->start; |
519 |
} |
519 |
} |
520 |
#endif |
520 |
#endif |
Lines 525-531
Link Here
|
525 |
alloc_data_t *file_space=*current_search_space; |
525 |
alloc_data_t *file_space=*current_search_space; |
526 |
for(nbr=0;nbr<5;nbr++) |
526 |
for(nbr=0;nbr<5;nbr++) |
527 |
{ |
527 |
{ |
528 |
file_space=list_entry(file_space->list.prev, alloc_data_t, list); |
528 |
file_space=td_list_entry(file_space->list.prev, alloc_data_t, list); |
529 |
if(file_space==list_search_space) |
529 |
if(file_space==list_search_space) |
530 |
return -1; |
530 |
return -1; |
531 |
if(file_space->file_stat!=NULL) |
531 |
if(file_space->file_stat!=NULL) |
Lines 540-547
Link Here
|
540 |
|
540 |
|
541 |
void forget(alloc_data_t *list_search_space, alloc_data_t *current_search_space) |
541 |
void forget(alloc_data_t *list_search_space, alloc_data_t *current_search_space) |
542 |
{ |
542 |
{ |
543 |
struct list_head *search_walker = NULL; |
543 |
struct td_list_head *search_walker = NULL; |
544 |
struct list_head *prev= NULL; |
544 |
struct td_list_head *prev= NULL; |
545 |
int nbr=0; |
545 |
int nbr=0; |
546 |
if(current_search_space==list_search_space) |
546 |
if(current_search_space==list_search_space) |
547 |
return ; |
547 |
return ; |
Lines 553-560
Link Here
|
553 |
if(nbr>10000) |
553 |
if(nbr>10000) |
554 |
{ |
554 |
{ |
555 |
alloc_data_t *tmp; |
555 |
alloc_data_t *tmp; |
556 |
tmp=list_entry(search_walker, alloc_data_t, list); |
556 |
tmp=td_list_entry(search_walker, alloc_data_t, list); |
557 |
list_del(&tmp->list); |
557 |
td_list_del(&tmp->list); |
558 |
free(tmp); |
558 |
free(tmp); |
559 |
} |
559 |
} |
560 |
else |
560 |
else |
Lines 564-577
Link Here
|
564 |
|
564 |
|
565 |
void list_cluster_free(list_cluster_t *list_cluster) |
565 |
void list_cluster_free(list_cluster_t *list_cluster) |
566 |
{ |
566 |
{ |
567 |
struct list_head *dir_walker = NULL; |
567 |
struct td_list_head *dir_walker = NULL; |
568 |
struct list_head *dir_walker_next = NULL; |
568 |
struct td_list_head *dir_walker_next = NULL; |
569 |
list_for_each_safe(dir_walker,dir_walker_next,&list_cluster->list) |
569 |
td_list_for_each_safe(dir_walker,dir_walker_next,&list_cluster->list) |
570 |
{ |
570 |
{ |
571 |
list_cluster_t *info; |
571 |
list_cluster_t *info; |
572 |
info=list_entry(dir_walker, list_cluster_t, list); |
572 |
info=td_list_entry(dir_walker, list_cluster_t, list); |
573 |
delete_list_file(info->dir_list); |
573 |
delete_list_file(info->dir_list); |
574 |
list_del(dir_walker); |
574 |
td_list_del(dir_walker); |
575 |
free(info); |
575 |
free(info); |
576 |
} |
576 |
} |
577 |
} |
577 |
} |
Lines 589-604
Link Here
|
589 |
|
589 |
|
590 |
void update_stats(file_stat_t *file_stats, alloc_data_t *list_search_space) |
590 |
void update_stats(file_stat_t *file_stats, alloc_data_t *list_search_space) |
591 |
{ |
591 |
{ |
592 |
struct list_head *search_walker = NULL; |
592 |
struct td_list_head *search_walker = NULL; |
593 |
int i; |
593 |
int i; |
594 |
/* Reset */ |
594 |
/* Reset */ |
595 |
for(i=0;file_stats[i].file_hint!=NULL;i++) |
595 |
for(i=0;file_stats[i].file_hint!=NULL;i++) |
596 |
file_stats[i].not_recovered=0; |
596 |
file_stats[i].not_recovered=0; |
597 |
/* Update */ |
597 |
/* Update */ |
598 |
list_for_each(search_walker, &list_search_space->list) |
598 |
td_list_for_each(search_walker, &list_search_space->list) |
599 |
{ |
599 |
{ |
600 |
alloc_data_t *current_search_space; |
600 |
alloc_data_t *current_search_space; |
601 |
current_search_space=list_entry(search_walker, alloc_data_t, list); |
601 |
current_search_space=td_list_entry(search_walker, alloc_data_t, list); |
602 |
if(current_search_space->file_stat!=NULL) |
602 |
if(current_search_space->file_stat!=NULL) |
603 |
{ |
603 |
{ |
604 |
current_search_space->file_stat->not_recovered++; |
604 |
current_search_space->file_stat->not_recovered++; |
Lines 705-717
Link Here
|
705 |
unsigned int nbr_max=0; |
705 |
unsigned int nbr_max=0; |
706 |
for(cluster_size=default_blocksize;cluster_size<=128*512;cluster_size*=2) |
706 |
for(cluster_size=default_blocksize;cluster_size<=128*512;cluster_size*=2) |
707 |
{ |
707 |
{ |
708 |
struct list_head *dir_walker = NULL; |
708 |
struct td_list_head *dir_walker = NULL; |
709 |
cluster_offset_t cluster_offset[1000]; |
709 |
cluster_offset_t cluster_offset[1000]; |
710 |
unsigned int nbr_sol=0; |
710 |
unsigned int nbr_sol=0; |
711 |
list_for_each(dir_walker,&list_cluster->list) |
711 |
td_list_for_each(dir_walker,&list_cluster->list) |
712 |
{ |
712 |
{ |
713 |
list_cluster_t *info; |
713 |
list_cluster_t *info; |
714 |
info=list_entry(dir_walker, list_cluster_t, list); |
714 |
info=td_list_entry(dir_walker, list_cluster_t, list); |
715 |
if(info->cluster>=2 && (info->cluster-2)*cluster_size<info->offset) |
715 |
if(info->cluster>=2 && (info->cluster-2)*cluster_size<info->offset) |
716 |
{ |
716 |
{ |
717 |
unsigned int sol_cur; |
717 |
unsigned int sol_cur; |
Lines 753-767
Link Here
|
753 |
int blocksize_ok=0; |
753 |
int blocksize_ok=0; |
754 |
unsigned int blocksize; |
754 |
unsigned int blocksize; |
755 |
*offset=0; |
755 |
*offset=0; |
756 |
if(list_empty(&list_file->list)) |
756 |
if(td_list_empty(&list_file->list)) |
757 |
return default_blocksize; |
757 |
return default_blocksize; |
758 |
for(blocksize=128*512;blocksize>=default_blocksize && blocksize_ok==0;blocksize=blocksize>>1) |
758 |
for(blocksize=128*512;blocksize>=default_blocksize && blocksize_ok==0;blocksize=blocksize>>1) |
759 |
{ |
759 |
{ |
760 |
struct list_head *search_walker = NULL; |
760 |
struct td_list_head *search_walker = NULL; |
761 |
blocksize_ok=1; |
761 |
blocksize_ok=1; |
762 |
{ |
762 |
{ |
763 |
alloc_data_t *tmp; |
763 |
alloc_data_t *tmp; |
764 |
tmp=list_entry(list_file->list.next, alloc_data_t, list); |
764 |
tmp=td_list_entry(list_file->list.next, alloc_data_t, list); |
765 |
*offset=tmp->start%blocksize; |
765 |
*offset=tmp->start%blocksize; |
766 |
} |
766 |
} |
767 |
for(search_walker=list_file->list.next; |
767 |
for(search_walker=list_file->list.next; |
Lines 769-775
Link Here
|
769 |
search_walker=search_walker->next) |
769 |
search_walker=search_walker->next) |
770 |
{ |
770 |
{ |
771 |
alloc_data_t *current_file; |
771 |
alloc_data_t *current_file; |
772 |
current_file=list_entry(search_walker, alloc_data_t, list); |
772 |
current_file=td_list_entry(search_walker, alloc_data_t, list); |
773 |
if(current_file->start%blocksize!=*offset) |
773 |
if(current_file->start%blocksize!=*offset) |
774 |
blocksize_ok=0; |
774 |
blocksize_ok=0; |
775 |
} |
775 |
} |
Lines 780-797
Link Here
|
780 |
|
780 |
|
781 |
alloc_data_t * update_blocksize(unsigned int blocksize, alloc_data_t *list_search_space, const uint64_t offset) |
781 |
alloc_data_t * update_blocksize(unsigned int blocksize, alloc_data_t *list_search_space, const uint64_t offset) |
782 |
{ |
782 |
{ |
783 |
struct list_head *search_walker = NULL; |
783 |
struct td_list_head *search_walker = NULL; |
784 |
struct list_head *search_walker_next = NULL; |
784 |
struct td_list_head *search_walker_next = NULL; |
785 |
list_for_each_safe(search_walker,search_walker_next,&list_search_space->list) |
785 |
td_list_for_each_safe(search_walker,search_walker_next,&list_search_space->list) |
786 |
{ |
786 |
{ |
787 |
alloc_data_t *current_search_space; |
787 |
alloc_data_t *current_search_space; |
788 |
current_search_space=list_entry(search_walker, alloc_data_t, list); |
788 |
current_search_space=td_list_entry(search_walker, alloc_data_t, list); |
789 |
current_search_space->start=(current_search_space->start-offset%blocksize+blocksize-1)/blocksize*blocksize+offset%blocksize; |
789 |
current_search_space->start=(current_search_space->start-offset%blocksize+blocksize-1)/blocksize*blocksize+offset%blocksize; |
790 |
if(current_search_space->start>current_search_space->end) |
790 |
if(current_search_space->start>current_search_space->end) |
791 |
{ |
791 |
{ |
792 |
list_del(search_walker); |
792 |
td_list_del(search_walker); |
793 |
if(list_search_space==current_search_space) |
793 |
if(list_search_space==current_search_space) |
794 |
list_search_space=list_entry(search_walker_next, alloc_data_t, list); |
794 |
list_search_space=td_list_entry(search_walker_next, alloc_data_t, list); |
795 |
free(current_search_space); |
795 |
free(current_search_space); |
796 |
} |
796 |
} |
797 |
} |
797 |
} |
Lines 1240-1253
Link Here
|
1240 |
list_free_add(file_recovery, list_search_space); |
1240 |
list_free_add(file_recovery, list_search_space); |
1241 |
if((*current_search_space)!=list_search_space && |
1241 |
if((*current_search_space)!=list_search_space && |
1242 |
!((*current_search_space)->start <= *offset && *offset <= (*current_search_space)->end)) |
1242 |
!((*current_search_space)->start <= *offset && *offset <= (*current_search_space)->end)) |
1243 |
*current_search_space=list_entry((*current_search_space)->list.next, alloc_data_t, list); |
1243 |
*current_search_space=td_list_entry((*current_search_space)->list.next, alloc_data_t, list); |
1244 |
} |
1244 |
} |
1245 |
else if(status!=STATUS_EXT2_ON_SAVE_EVERYTHING && status!=STATUS_EXT2_OFF_SAVE_EVERYTHING && status!=STATUS_FIND_OFFSET) |
1245 |
else if(status!=STATUS_EXT2_ON_SAVE_EVERYTHING && status!=STATUS_EXT2_OFF_SAVE_EVERYTHING && status!=STATUS_FIND_OFFSET) |
1246 |
{ |
1246 |
{ |
1247 |
list_search_space=update_search_space(file_recovery,list_search_space,current_search_space,offset,blocksize); |
1247 |
list_search_space=update_search_space(file_recovery,list_search_space,current_search_space,offset,blocksize); |
1248 |
file_recovered=1; |
1248 |
file_recovered=1; |
1249 |
} |
1249 |
} |
1250 |
list_delete(file_recovery->location.next); |
1250 |
td_list_delete(file_recovery->location.next); |
1251 |
file_recovery->location.next=NULL; |
1251 |
file_recovery->location.next=NULL; |
1252 |
} |
1252 |
} |
1253 |
if(file_recovery->file_size==0 && file_recovery->offset_error!=0) |
1253 |
if(file_recovery->file_size==0 && file_recovery->offset_error!=0) |