summaryrefslogtreecommitdiff
path: root/src/recover.c
diff options
context:
space:
mode:
authorrobi <robi>2010-07-23 23:03:46 +0000
committerrobi <robi>2010-07-23 23:03:46 +0000
commit79c1f7fb7061e1c2350c41e14be82605e7c21e34 (patch)
treee363b6f2b3ee10b4141ef84ac99ede6fbafa4b39 /src/recover.c
parent0e1df704d554e89452bc3769f994b54ec14ac4bb (diff)
Bug 17387
Diffstat (limited to 'src/recover.c')
-rw-r--r--src/recover.c7
1 files changed, 3 insertions, 4 deletions
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 );