Whamcloud - gitweb
ChangeLog, subst.conf.in:
[tools/e2fsprogs.git] / resize / resize2fs.h
1 /*
2  * resize2fs.h --- ext2 resizer header file
3  *
4  * Copyright (C) 1997 Theodore Ts'o
5  * 
6  * %Begin-Header%
7  * All rights reserved.
8  * %End-Header%
9  */
10
11 #include <stdio.h>
12 #include <string.h>
13 #include <unistd.h>
14 #include <stdlib.h>
15 #ifdef HAVE_SYS_TYPES_H
16 #include <sys/types.h>
17 #endif
18 #ifdef HAVE_SYS_TIME_H
19 #include <sys/time.h>
20 #endif
21 #if HAVE_ERRNO_H
22 #include <errno.h>
23 #endif
24
25 #ifdef HAVE_LINUX_FS_H
26 #include <linux/fs.h>
27 #endif
28
29 #if EXT2_FLAT_INCLUDES
30 #include "ext2_fs.h"
31 #include "ext2fs.h"
32 #else
33 #include <linux/ext2_fs.h>
34 #include "ext2fs/ext2fs.h"
35 #endif
36
37
38 /*
39  * For the extent map
40  */
41 typedef struct _ext2_extent *ext2_extent;
42
43 /*
44  * For the simple progress meter
45  */
46 typedef struct ext2_sim_progress *ext2_sim_progmeter;
47
48 /*
49  * Flags for the resizer; most are debugging flags only
50  */
51 #define RESIZE_DEBUG_IO                 0x0001
52 #define RESIZE_DEBUG_BMOVE              0x0002
53 #define RESIZE_DEBUG_INODEMAP           0x0004
54 #define RESIZE_DEBUG_ITABLEMOVE         0x0008
55
56 #define RESIZE_PERCENT_COMPLETE         0x0100
57 #define RESIZE_VERBOSE                  0x0200
58
59 /*
60  * The core state structure for the ext2 resizer
61  */
62 typedef struct ext2_resize_struct *ext2_resize_t;
63
64 struct ext2_resize_struct {
65         ext2_filsys     old_fs;
66         ext2_filsys     new_fs;
67         ext2fs_block_bitmap reserve_blocks;
68         ext2fs_block_bitmap move_blocks;
69         ext2_extent     bmap;
70         ext2_extent     imap;
71         int             needed_blocks;
72         int             flags;
73         char            *itable_buf;
74
75         /*
76          * For the block allocator
77          */
78         blk_t           new_blk;
79         int             alloc_state;
80
81         /*
82          * For the progress meter
83          */
84         errcode_t       (*progress)(ext2_resize_t rfs, int pass,
85                                     unsigned long cur,
86                                     unsigned long max);
87         void            *prog_data;
88 };
89
90 /*
91  * Progress pass numbers...
92  */
93 #define E2_RSZ_EXTEND_ITABLE_PASS       1
94 #define E2_RSZ_BLOCK_RELOC_PASS         2
95 #define E2_RSZ_INODE_SCAN_PASS          3
96 #define E2_RSZ_INODE_REF_UPD_PASS       4
97 #define E2_RSZ_MOVE_ITABLE_PASS         5
98
99
100 /* prototypes */
101 extern errcode_t resize_fs(ext2_filsys fs, blk_t new_size, int flags,
102                            errcode_t    (*progress)(ext2_resize_t rfs,
103                                             int pass, unsigned long cur,
104                                             unsigned long max));
105
106 /* extent.c */
107 extern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent,
108                                             int size);
109 extern void ext2fs_free_extent_table(ext2_extent extent);
110 extern errcode_t ext2fs_add_extent_entry(ext2_extent extent,
111                                          __u32 old_loc, __u32 new_loc);
112 extern __u32 ext2fs_extent_translate(ext2_extent extent, __u32 old_loc);
113 extern void ext2fs_extent_dump(ext2_extent extent, FILE *out);
114 extern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u32 *old_loc,
115                                        __u32 *new_loc, int *size);
116
117 /* sim_progress.c */
118 extern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
119                                       const char *label,
120                                       int labelwidth, int barwidth,
121                                       __u32 maxdone, int flags);
122 extern void ext2fs_progress_update(ext2_sim_progmeter prog,
123                                         __u32 current);
124 extern void ext2fs_progress_close(ext2_sim_progmeter prog);
125
126