~daniel-mehrmann/e2fsprogs/master

« back to all changes in this revision

Viewing changes to lib/ext2fs/expanddir.c

  • Committer: Daniel Mehrmann
  • Date: 2014-12-16 09:16:59 UTC
  • mfrom: (1.2.25)
  • Revision ID: daniel.mehrmann@gmx.de-20141216091659-ymhbl4ualba43vuc
Tags: 1.43-SN-2014-12-16-0ubuntu1
* Merge in snapshot from the maint branch 

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
#include "ext2_fs.h"
20
20
#include "ext2fs.h"
 
21
#include "ext2fsP.h"
21
22
 
22
23
struct expand_dir_struct {
23
24
        int             done;
24
25
        int             newblocks;
25
26
        blk64_t         goal;
26
27
        errcode_t       err;
 
28
        ext2_ino_t      dir;
27
29
};
28
30
 
29
31
static int expand_dir_proc(ext2_filsys  fs,
63
65
                        return BLOCK_ABORT;
64
66
                }
65
67
                es->done = 1;
66
 
                retval = ext2fs_write_dir_block(fs, new_blk, block);
67
 
        } else {
68
 
                retval = ext2fs_get_mem(fs->blocksize, &block);
69
 
                if (retval) {
70
 
                        es->err = retval;
71
 
                        return BLOCK_ABORT;
72
 
                }
73
 
                memset(block, 0, fs->blocksize);
74
 
                retval = io_channel_write_blk64(fs->io, new_blk, 1, block);
75
 
        }
 
68
                retval = ext2fs_write_dir_block4(fs, new_blk, block, 0,
 
69
                                                 es->dir);
 
70
                ext2fs_free_mem(&block);
 
71
        } else
 
72
                retval = ext2fs_zero_blocks2(fs, new_blk, 1, NULL, NULL);
76
73
        if (blockcnt >= 0)
77
74
                es->goal = new_blk;
78
75
        if (retval) {
79
76
                es->err = retval;
80
77
                return BLOCK_ABORT;
81
78
        }
82
 
        ext2fs_free_mem(&block);
83
79
        *blocknr = new_blk;
84
80
 
85
81
        if (es->done)
106
102
        if (retval)
107
103
                return retval;
108
104
 
 
105
        retval = ext2fs_read_inode(fs, dir, &inode);
 
106
        if (retval)
 
107
                return retval;
 
108
 
109
109
        es.done = 0;
110
110
        es.err = 0;
111
 
        es.goal = 0;
 
111
        es.goal = ext2fs_find_inode_goal(fs, dir, &inode, 0);
112
112
        es.newblocks = 0;
 
113
        es.dir = dir;
113
114
 
114
115
        retval = ext2fs_block_iterate3(fs, dir, BLOCK_FLAG_APPEND,
115
116
                                       0, expand_dir_proc, &es);
 
117
        if (retval == EXT2_ET_INLINE_DATA_CANT_ITERATE)
 
118
                return ext2fs_inline_data_expand(fs, dir);
116
119
 
117
120
        if (es.err)
118
121
                return es.err;