]>
Commit | Line | Data |
---|---|---|
19c78dc0 TT |
1 | /* |
2 | * ext2fsP.h --- private header file for ext2 library | |
efc6f628 | 3 | * |
19c78dc0 TT |
4 | * Copyright (C) 1997 Theodore Ts'o. |
5 | * | |
6 | * %Begin-Header% | |
543547a5 TT |
7 | * This file may be redistributed under the terms of the GNU Library |
8 | * General Public License, version 2. | |
19c78dc0 TT |
9 | * %End-Header% |
10 | */ | |
11 | ||
12 | #include "ext2fs.h" | |
13 | ||
08ae93a2 NY |
14 | #define EXT2FS_MAX_NESTED_LINKS 8 |
15 | ||
19c78dc0 TT |
16 | /* |
17 | * Badblocks list | |
18 | */ | |
b7a00563 | 19 | struct ext2_struct_u32_list { |
19c78dc0 TT |
20 | int magic; |
21 | int num; | |
22 | int size; | |
b7a00563 | 23 | __u32 *list; |
19c78dc0 TT |
24 | int badblocks_flags; |
25 | }; | |
26 | ||
b7a00563 TT |
27 | struct ext2_struct_u32_iterate { |
28 | int magic; | |
29 | ext2_u32_list bb; | |
30 | int ptr; | |
19c78dc0 TT |
31 | }; |
32 | ||
33 | ||
34 | /* | |
35 | * Directory block iterator definition | |
36 | */ | |
37 | struct ext2_struct_dblist { | |
38 | int magic; | |
39 | ext2_filsys fs; | |
ab13b5a9 TT |
40 | unsigned long long size; |
41 | unsigned long long count; | |
19c78dc0 | 42 | int sorted; |
ab13b5a9 | 43 | struct ext2_db_entry2 * list; |
19c78dc0 TT |
44 | }; |
45 | ||
46 | /* | |
47 | * For directory iterators | |
48 | */ | |
49 | struct dir_context { | |
31dbecd4 | 50 | ext2_ino_t dir; |
19c78dc0 TT |
51 | int flags; |
52 | char *buf; | |
416c1de9 | 53 | unsigned int buflen; |
8bd0c959 TT |
54 | int (*func)(ext2_ino_t dir, |
55 | int entry, | |
56 | struct ext2_dir_entry *dirent, | |
19c78dc0 TT |
57 | int offset, |
58 | int blocksize, | |
59 | char *buf, | |
b5abe6fa | 60 | void *priv_data); |
b5abe6fa | 61 | void *priv_data; |
19c78dc0 TT |
62 | errcode_t errcode; |
63 | }; | |
64 | ||
a29f4d30 TT |
65 | /* |
66 | * Inode cache structure | |
67 | */ | |
68 | struct ext2_inode_cache { | |
69 | void * buffer; | |
4dbfd79d | 70 | blk64_t buffer_blk; |
a29f4d30 | 71 | int cache_last; |
be31a8de | 72 | unsigned int cache_size; |
a29f4d30 TT |
73 | int refcount; |
74 | struct ext2_inode_cache_ent *cache; | |
75 | }; | |
76 | ||
77 | struct ext2_inode_cache_ent { | |
31dbecd4 | 78 | ext2_ino_t ino; |
91db7e20 | 79 | struct ext2_inode *inode; |
a29f4d30 | 80 | }; |
19c78dc0 TT |
81 | |
82 | /* Function prototypes */ | |
83 | ||
36a43d67 | 84 | extern int ext2fs_process_dir_block(ext2_filsys fs, |
ab13b5a9 | 85 | blk64_t *blocknr, |
03673dbb | 86 | e2_blkcnt_t blockcnt, |
ab13b5a9 | 87 | blk64_t ref_block, |
36a43d67 TT |
88 | int ref_offset, |
89 | void *priv_data); | |
90 | ||
97581d44 | 91 | extern errcode_t ext2fs_inline_data_ea_remove(ext2_filsys fs, ext2_ino_t ino); |
46bd6bdf | 92 | extern errcode_t ext2fs_inline_data_expand(ext2_filsys fs, ext2_ino_t ino); |
416c1de9 ZL |
93 | extern int ext2fs_inline_data_dir_iterate(ext2_filsys fs, |
94 | ext2_ino_t ino, | |
95 | void *priv_data); | |
96 | ||
95fd65bb VAH |
97 | /* Generic numeric progress meter */ |
98 | ||
99 | struct ext2fs_numeric_progress_struct { | |
100 | __u64 max; | |
101 | int log_max; | |
102 | int skip_progress; | |
103 | }; | |
104 | ||
dfe74c5c TT |
105 | /* |
106 | * progress callback functions | |
107 | */ | |
108 | struct ext2fs_progress_ops { | |
109 | void (*init)(ext2_filsys fs, | |
110 | struct ext2fs_numeric_progress_struct * progress, | |
111 | const char *label, __u64 max); | |
112 | void (*update)(ext2_filsys fs, | |
113 | struct ext2fs_numeric_progress_struct * progress, | |
114 | __u64 val); | |
115 | void (*close)(ext2_filsys fs, | |
116 | struct ext2fs_numeric_progress_struct * progress, | |
117 | const char *message); | |
118 | }; | |
119 | ||
120 | extern struct ext2fs_progress_ops ext2fs_numeric_progress_ops; | |
121 | ||
95fd65bb VAH |
122 | extern void ext2fs_numeric_progress_init(ext2_filsys fs, |
123 | struct ext2fs_numeric_progress_struct * progress, | |
124 | const char *label, __u64 max); | |
125 | extern void ext2fs_numeric_progress_update(ext2_filsys fs, | |
126 | struct ext2fs_numeric_progress_struct * progress, | |
127 | __u64 val); | |
128 | extern void ext2fs_numeric_progress_close(ext2_filsys fs, | |
129 | struct ext2fs_numeric_progress_struct * progress, | |
130 | const char *message); | |
19c78dc0 | 131 | |
69365c68 TT |
132 | /* |
133 | * 64-bit bitmap support | |
134 | */ | |
135 | ||
69365c68 TT |
136 | extern errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic, |
137 | int type, __u64 start, __u64 end, | |
138 | __u64 real_end, | |
139 | const char * description, | |
140 | ext2fs_generic_bitmap *bmap); | |
141 | ||
142 | extern void ext2fs_free_generic_bmap(ext2fs_generic_bitmap bmap); | |
143 | ||
144 | extern errcode_t ext2fs_copy_generic_bmap(ext2fs_generic_bitmap src, | |
145 | ext2fs_generic_bitmap *dest); | |
146 | ||
147 | extern errcode_t ext2fs_resize_generic_bmap(ext2fs_generic_bitmap bmap, | |
148 | __u64 new_end, | |
149 | __u64 new_real_end); | |
150 | extern errcode_t ext2fs_fudge_generic_bmap_end(ext2fs_generic_bitmap bitmap, | |
151 | errcode_t neq, | |
152 | __u64 end, __u64 *oend); | |
153 | extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap, | |
154 | __u64 arg); | |
155 | extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap, | |
156 | __u64 arg); | |
157 | extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap, | |
158 | __u64 arg); | |
159 | extern errcode_t ext2fs_set_generic_bmap_range(ext2fs_generic_bitmap bitmap, | |
160 | __u64 start, unsigned int num, | |
161 | void *in); | |
162 | extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap, | |
163 | __u64 start, unsigned int num, | |
164 | void *out); | |
65d05cec | 165 | extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func); |
c21cde99 | 166 | |
69365c68 | 167 | extern int ext2fs_mem_is_zero(const char *mem, size_t len); |
1e745149 | 168 | |
269da3b8 AD |
169 | extern int ext2fs_file_block_offset_too_big(ext2_filsys fs, |
170 | struct ext2_inode *inode, | |
171 | blk64_t offset); | |
dc248a10 DW |
172 | |
173 | /* atexit support */ | |
174 | typedef void (*ext2_exit_fn)(void *); | |
175 | errcode_t ext2fs_add_exit_fn(ext2_exit_fn fn, void *data); | |
176 | errcode_t ext2fs_remove_exit_fn(ext2_exit_fn fn, void *data); |