summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/inode.c2
-rw-r--r--src/recover.c7
2 files changed, 4 insertions, 5 deletions
diff --git a/src/inode.c b/src/inode.c
index 1849420..487ca37 100644
--- a/src/inode.c
+++ b/src/inode.c
@@ -474,7 +474,7 @@ void dump_inode(FILE *out, const char *prefix,
}
fprintf(out, "%sDevice major/minor number: %02d:%02d (hex %02x:%02x)\n\n",
devnote, major, minor, major, minor);
- } else if (do_dump_blocks) {
+ } else if (do_dump_blocks && !(inode->i_dtime)) {
if (inode->i_flags & EXT4_EXTENTS_FL)
local_dump_extents(out, prefix, inode,
DUMP_LEAF_EXTENTS, 0, 0);
diff --git a/src/recover.c b/src/recover.c
index b0dddd2..3394e4e 100644
--- a/src/recover.c
+++ b/src/recover.c
@@ -380,8 +380,7 @@ int recover_file( char* des_dir,char* pathname, char* filename, struct ext2_inod
//symbolic link
case LINUX_S_IFLNK :
- if(inode->i_blocks){
-//FIXME: not work if linkname bigger as the blocksize
+ if (ext2fs_inode_data_blocks(current_fs,inode)){
buf = malloc(current_fs->blocksize);
if (buf) {
priv.buf = buf;
@@ -396,7 +395,7 @@ int recover_file( char* des_dir,char* pathname, char* filename, struct ext2_inod
else {
int i;
- if(! inode->i_size || (inode->i_size > 60))
+ if(! inode->i_size || (inode->i_size >= 60))
goto errout;
buf = malloc(inode->i_size + 1);
linkname = (char*) &(inode->i_block[0]);
@@ -507,7 +506,7 @@ int check_file_recover(struct ext2_inode *inode){
stat.allocated = 0;
stat.not_allocated = 0;
- if (! inode->i_blocks)
+ if ((! inode->i_blocks) || (LINUX_S_ISLNK(inode->i_mode) && (inode->i_size < EXT2_N_BLOCKS*4)))
retval = 100;
else{
retval = local_block_iterate3 ( current_fs, *inode, BLOCK_FLAG_DATA_ONLY, NULL, check_block, &stat );