diff options
author | robi <robi> | 2010-07-23 23:03:46 +0000 |
---|---|---|
committer | robi <robi> | 2010-07-23 23:03:46 +0000 |
commit | 79c1f7fb7061e1c2350c41e14be82605e7c21e34 (patch) | |
tree | e363b6f2b3ee10b4141ef84ac99ede6fbafa4b39 /src/recover.c | |
parent | 0e1df704d554e89452bc3769f994b54ec14ac4bb (diff) |
Bug 17387
Diffstat (limited to 'src/recover.c')
-rw-r--r-- | src/recover.c | 7 |
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 ); |