summaryrefslogtreecommitdiff
path: root/src/ext4magic.c
diff options
context:
space:
mode:
authorrobi <robi>2011-04-03 15:10:39 +0000
committerrobi <robi>2011-04-03 15:10:39 +0000
commitfb92be8d753bff01ea506564abd14f0398e16d47 (patch)
tree2d7614b21366314da907dd262bdb02445786b626 /src/ext4magic.c
parent95dfaf3cf990cf2b4eda22a34a44af20f29f5f32 (diff)
recover-all-mode if possible
Diffstat (limited to 'src/ext4magic.c')
-rw-r--r--src/ext4magic.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/ext4magic.c b/src/ext4magic.c
index 7a07eda..703c3d5 100644
--- a/src/ext4magic.c
+++ b/src/ext4magic.c
@@ -637,7 +637,7 @@ if (mode & INPUT_TIME){
//check for the recoverdir
-if ((mode & RECOVER_INODE) && (recovermodus & (REC_DIR_NEEDED)) || mode & RECOVER_LIST || magicscan) {
+if ((mode & RECOVER_INODE) && (recovermodus & REC_DIR_NEEDED) || mode & RECOVER_LIST || magicscan) {
struct stat st_buf;
dev_t file_rdev=0;
@@ -845,6 +845,24 @@ if (mode & READ_JOURNAL){
}
+
+// recover all mode if possible
+// activate magic level 1 and 2 for recover from the root inode
+ if ((inode_nr == EXT2_ROOT_INO) && (mode & COMMAND_INODE) && (mode & RECOVER_INODE)
+ && (recoverquality) && (recovermodus & REC_DIR_NEEDED) && (! magicscan)) {
+ if( ext2fs_copy_bitmap(current_fs->inode_map, &imap)){
+ fprintf(stderr,"%s Error while copy bitmap\n",argv[optind]);
+ imap = NULL;
+ }else{
+ int i;
+ ext2fs_clear_inode_bitmap(imap);
+ for (i = 1; i < current_fs->super->s_first_ino; i++)
+ ext2fs_mark_generic_bitmap(imap,i); //mark inode 1-8
+ }
+ }
+
+
+
// print journal transaction bocklist
if (mode & PRINT_BLOCKLIST){
if (mode & COMMAND_BLOCK)
@@ -928,10 +946,10 @@ if ((mode & COMMAND_INODE) && (mode & RECOVER_INODE))
// I think imap is no longer needed from here, free the allocated memory
ext2fs_free_inode_bitmap(imap);
imap = NULL;
- if (!(current_fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS))
+ if (bmap && (!(current_fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS)))
magic_block_scan3(des_dir, t_after);
else
- printf("The MAGIC Funktion is currently only for ext3 filesystems available\n");
+ if (bmap) printf("The MAGIC Funktion is currently only for ext3 filesystems available\n");
}
clear_dir_list(dir);
}