diff options
Diffstat (limited to 'e2fsprogs/e2fsck/e2fsck.h')
-rw-r--r-- | e2fsprogs/e2fsck/e2fsck.h | 446 |
1 files changed, 0 insertions, 446 deletions
diff --git a/e2fsprogs/e2fsck/e2fsck.h b/e2fsprogs/e2fsck/e2fsck.h deleted file mode 100644 index 489903d7c..000000000 --- a/e2fsprogs/e2fsck/e2fsck.h +++ /dev/null | |||
@@ -1,446 +0,0 @@ | |||
1 | /* | ||
2 | * e2fsck.h | ||
3 | * | ||
4 | * Copyright (C) 1993, 1994 Theodore Ts'o. This file may be | ||
5 | * redistributed under the terms of the GNU Public License. | ||
6 | * | ||
7 | */ | ||
8 | |||
9 | #include <stdio.h> | ||
10 | #include <string.h> | ||
11 | #ifdef HAVE_UNISTD_H | ||
12 | #include <unistd.h> | ||
13 | #endif | ||
14 | #include <stdlib.h> | ||
15 | #include <time.h> | ||
16 | #ifdef HAVE_SYS_TYPES_H | ||
17 | #include <sys/types.h> | ||
18 | #endif | ||
19 | #ifdef HAVE_SYS_TIME_H | ||
20 | #include <sys/time.h> | ||
21 | #endif | ||
22 | #ifdef HAVE_SETJMP_H | ||
23 | #include <setjmp.h> | ||
24 | #endif | ||
25 | |||
26 | #if EXT2_FLAT_INCLUDES | ||
27 | #include "ext2_fs.h" | ||
28 | #include "ext2fs.h" | ||
29 | #include "blkid.h" | ||
30 | #else | ||
31 | #include "ext2fs/ext2_fs.h" | ||
32 | #include "ext2fs/ext2fs.h" | ||
33 | #include "blkid/blkid.h" | ||
34 | #endif | ||
35 | |||
36 | /* | ||
37 | * Exit codes used by fsck-type programs | ||
38 | */ | ||
39 | #define FSCK_OK 0 /* No errors */ | ||
40 | #define FSCK_NONDESTRUCT 1 /* File system errors corrected */ | ||
41 | #define FSCK_REBOOT 2 /* System should be rebooted */ | ||
42 | #define FSCK_UNCORRECTED 4 /* File system errors left uncorrected */ | ||
43 | #define FSCK_ERROR 8 /* Operational error */ | ||
44 | #define FSCK_USAGE 16 /* Usage or syntax error */ | ||
45 | #define FSCK_CANCELED 32 /* Aborted with a signal or ^C */ | ||
46 | #define FSCK_LIBRARY 128 /* Shared library error */ | ||
47 | |||
48 | /* | ||
49 | * The last ext2fs revision level that this version of e2fsck is able to | ||
50 | * support | ||
51 | */ | ||
52 | #define E2FSCK_CURRENT_REV 1 | ||
53 | |||
54 | /* | ||
55 | * The directory information structure; stores directory information | ||
56 | * collected in earlier passes, to avoid disk i/o in fetching the | ||
57 | * directory information. | ||
58 | */ | ||
59 | struct dir_info { | ||
60 | ext2_ino_t ino; /* Inode number */ | ||
61 | ext2_ino_t dotdot; /* Parent according to '..' */ | ||
62 | ext2_ino_t parent; /* Parent according to treewalk */ | ||
63 | }; | ||
64 | |||
65 | |||
66 | /* | ||
67 | * The indexed directory information structure; stores information for | ||
68 | * directories which contain a hash tree index. | ||
69 | */ | ||
70 | struct dx_dir_info { | ||
71 | ext2_ino_t ino; /* Inode number */ | ||
72 | int numblocks; /* number of blocks */ | ||
73 | int hashversion; | ||
74 | short depth; /* depth of tree */ | ||
75 | struct dx_dirblock_info *dx_block; /* Array of size numblocks */ | ||
76 | }; | ||
77 | |||
78 | #define DX_DIRBLOCK_ROOT 1 | ||
79 | #define DX_DIRBLOCK_LEAF 2 | ||
80 | #define DX_DIRBLOCK_NODE 3 | ||
81 | #define DX_DIRBLOCK_CORRUPT 4 | ||
82 | #define DX_DIRBLOCK_CLEARED 8 | ||
83 | |||
84 | struct dx_dirblock_info { | ||
85 | int type; | ||
86 | blk_t phys; | ||
87 | int flags; | ||
88 | blk_t parent; | ||
89 | ext2_dirhash_t min_hash; | ||
90 | ext2_dirhash_t max_hash; | ||
91 | ext2_dirhash_t node_min_hash; | ||
92 | ext2_dirhash_t node_max_hash; | ||
93 | }; | ||
94 | |||
95 | #define DX_FLAG_REFERENCED 1 | ||
96 | #define DX_FLAG_DUP_REF 2 | ||
97 | #define DX_FLAG_FIRST 4 | ||
98 | #define DX_FLAG_LAST 8 | ||
99 | |||
100 | #ifdef RESOURCE_TRACK | ||
101 | /* | ||
102 | * This structure is used for keeping track of how much resources have | ||
103 | * been used for a particular pass of e2fsck. | ||
104 | */ | ||
105 | struct resource_track { | ||
106 | struct timeval time_start; | ||
107 | struct timeval user_start; | ||
108 | struct timeval system_start; | ||
109 | void *brk_start; | ||
110 | }; | ||
111 | #endif | ||
112 | |||
113 | /* | ||
114 | * E2fsck options | ||
115 | */ | ||
116 | #define E2F_OPT_READONLY 0x0001 | ||
117 | #define E2F_OPT_PREEN 0x0002 | ||
118 | #define E2F_OPT_YES 0x0004 | ||
119 | #define E2F_OPT_NO 0x0008 | ||
120 | #define E2F_OPT_TIME 0x0010 | ||
121 | #define E2F_OPT_TIME2 0x0020 | ||
122 | #define E2F_OPT_CHECKBLOCKS 0x0040 | ||
123 | #define E2F_OPT_DEBUG 0x0080 | ||
124 | #define E2F_OPT_FORCE 0x0100 | ||
125 | #define E2F_OPT_WRITECHECK 0x0200 | ||
126 | #define E2F_OPT_COMPRESS_DIRS 0x0400 | ||
127 | |||
128 | /* | ||
129 | * E2fsck flags | ||
130 | */ | ||
131 | #define E2F_FLAG_ABORT 0x0001 /* Abort signaled */ | ||
132 | #define E2F_FLAG_CANCEL 0x0002 /* Cancel signaled */ | ||
133 | #define E2F_FLAG_SIGNAL_MASK 0x0003 | ||
134 | #define E2F_FLAG_RESTART 0x0004 /* Restart signaled */ | ||
135 | |||
136 | #define E2F_FLAG_SETJMP_OK 0x0010 /* Setjmp valid for abort */ | ||
137 | |||
138 | #define E2F_FLAG_PROG_BAR 0x0020 /* Progress bar on screen */ | ||
139 | #define E2F_FLAG_PROG_SUPPRESS 0x0040 /* Progress suspended */ | ||
140 | #define E2F_FLAG_JOURNAL_INODE 0x0080 /* Create a new ext3 journal inode */ | ||
141 | #define E2F_FLAG_SB_SPECIFIED 0x0100 /* The superblock was explicitly | ||
142 | * specified by the user */ | ||
143 | #define E2F_FLAG_RESTARTED 0x0200 /* E2fsck has been restarted */ | ||
144 | #define E2F_FLAG_RESIZE_INODE 0x0400 /* Request to recreate resize inode */ | ||
145 | |||
146 | /* | ||
147 | * Defines for indicating the e2fsck pass number | ||
148 | */ | ||
149 | #define E2F_PASS_1 1 | ||
150 | #define E2F_PASS_2 2 | ||
151 | #define E2F_PASS_3 3 | ||
152 | #define E2F_PASS_4 4 | ||
153 | #define E2F_PASS_5 5 | ||
154 | #define E2F_PASS_1B 6 | ||
155 | |||
156 | /* | ||
157 | * Define the extended attribute refcount structure | ||
158 | */ | ||
159 | typedef struct ea_refcount *ext2_refcount_t; | ||
160 | |||
161 | /* | ||
162 | * This is the global e2fsck structure. | ||
163 | */ | ||
164 | typedef struct e2fsck_struct *e2fsck_t; | ||
165 | |||
166 | struct e2fsck_struct { | ||
167 | ext2_filsys fs; | ||
168 | const char *program_name; | ||
169 | char *filesystem_name; | ||
170 | char *device_name; | ||
171 | char *io_options; | ||
172 | int flags; /* E2fsck internal flags */ | ||
173 | int options; | ||
174 | blk_t use_superblock; /* sb requested by user */ | ||
175 | blk_t superblock; /* sb used to open fs */ | ||
176 | int blocksize; /* blocksize */ | ||
177 | blk_t num_blocks; /* Total number of blocks */ | ||
178 | int mount_flags; | ||
179 | blkid_cache blkid; /* blkid cache */ | ||
180 | |||
181 | #ifdef HAVE_SETJMP_H | ||
182 | jmp_buf abort_loc; | ||
183 | #endif | ||
184 | unsigned long abort_code; | ||
185 | |||
186 | int (*progress)(e2fsck_t ctx, int pass, unsigned long cur, | ||
187 | unsigned long max); | ||
188 | |||
189 | ext2fs_inode_bitmap inode_used_map; /* Inodes which are in use */ | ||
190 | ext2fs_inode_bitmap inode_bad_map; /* Inodes which are bad somehow */ | ||
191 | ext2fs_inode_bitmap inode_dir_map; /* Inodes which are directories */ | ||
192 | ext2fs_inode_bitmap inode_bb_map; /* Inodes which are in bad blocks */ | ||
193 | ext2fs_inode_bitmap inode_imagic_map; /* AFS inodes */ | ||
194 | ext2fs_inode_bitmap inode_reg_map; /* Inodes which are regular files*/ | ||
195 | |||
196 | ext2fs_block_bitmap block_found_map; /* Blocks which are in use */ | ||
197 | ext2fs_block_bitmap block_dup_map; /* Blks referenced more than once */ | ||
198 | ext2fs_block_bitmap block_ea_map; /* Blocks which are used by EA's */ | ||
199 | |||
200 | /* | ||
201 | * Inode count arrays | ||
202 | */ | ||
203 | ext2_icount_t inode_count; | ||
204 | ext2_icount_t inode_link_info; | ||
205 | |||
206 | ext2_refcount_t refcount; | ||
207 | ext2_refcount_t refcount_extra; | ||
208 | |||
209 | /* | ||
210 | * Array of flags indicating whether an inode bitmap, block | ||
211 | * bitmap, or inode table is invalid | ||
212 | */ | ||
213 | int *invalid_inode_bitmap_flag; | ||
214 | int *invalid_block_bitmap_flag; | ||
215 | int *invalid_inode_table_flag; | ||
216 | int invalid_bitmaps; /* There are invalid bitmaps/itable */ | ||
217 | |||
218 | /* | ||
219 | * Block buffer | ||
220 | */ | ||
221 | char *block_buf; | ||
222 | |||
223 | /* | ||
224 | * For pass1_check_directory and pass1_get_blocks | ||
225 | */ | ||
226 | ext2_ino_t stashed_ino; | ||
227 | struct ext2_inode *stashed_inode; | ||
228 | |||
229 | /* | ||
230 | * Location of the lost and found directory | ||
231 | */ | ||
232 | ext2_ino_t lost_and_found; | ||
233 | int bad_lost_and_found; | ||
234 | |||
235 | /* | ||
236 | * Directory information | ||
237 | */ | ||
238 | int dir_info_count; | ||
239 | int dir_info_size; | ||
240 | struct dir_info *dir_info; | ||
241 | |||
242 | /* | ||
243 | * Indexed directory information | ||
244 | */ | ||
245 | int dx_dir_info_count; | ||
246 | int dx_dir_info_size; | ||
247 | struct dx_dir_info *dx_dir_info; | ||
248 | |||
249 | /* | ||
250 | * Directories to hash | ||
251 | */ | ||
252 | ext2_u32_list dirs_to_hash; | ||
253 | |||
254 | /* | ||
255 | * Tuning parameters | ||
256 | */ | ||
257 | int process_inode_size; | ||
258 | int inode_buffer_blocks; | ||
259 | |||
260 | /* | ||
261 | * ext3 journal support | ||
262 | */ | ||
263 | io_channel journal_io; | ||
264 | char *journal_name; | ||
265 | |||
266 | #ifdef RESOURCE_TRACK | ||
267 | /* | ||
268 | * For timing purposes | ||
269 | */ | ||
270 | struct resource_track global_rtrack; | ||
271 | #endif | ||
272 | |||
273 | /* | ||
274 | * How we display the progress update (for unix) | ||
275 | */ | ||
276 | int progress_fd; | ||
277 | int progress_pos; | ||
278 | int progress_last_percent; | ||
279 | unsigned int progress_last_time; | ||
280 | int interactive; /* Are we connected directly to a tty? */ | ||
281 | char start_meta[2], stop_meta[2]; | ||
282 | |||
283 | /* File counts */ | ||
284 | int fs_directory_count; | ||
285 | int fs_regular_count; | ||
286 | int fs_blockdev_count; | ||
287 | int fs_chardev_count; | ||
288 | int fs_links_count; | ||
289 | int fs_symlinks_count; | ||
290 | int fs_fast_symlinks_count; | ||
291 | int fs_fifo_count; | ||
292 | int fs_total_count; | ||
293 | int fs_badblocks_count; | ||
294 | int fs_sockets_count; | ||
295 | int fs_ind_count; | ||
296 | int fs_dind_count; | ||
297 | int fs_tind_count; | ||
298 | int fs_fragmented; | ||
299 | int large_files; | ||
300 | int fs_ext_attr_inodes; | ||
301 | int fs_ext_attr_blocks; | ||
302 | |||
303 | int ext_attr_ver; | ||
304 | |||
305 | /* | ||
306 | * For the use of callers of the e2fsck functions; not used by | ||
307 | * e2fsck functions themselves. | ||
308 | */ | ||
309 | void *priv_data; | ||
310 | }; | ||
311 | |||
312 | /* Used by the region allocation code */ | ||
313 | typedef __u32 region_addr_t; | ||
314 | typedef struct region_struct *region_t; | ||
315 | |||
316 | #ifndef HAVE_STRNLEN | ||
317 | #define strnlen(str, x) e2fsck_strnlen((str),(x)) | ||
318 | extern int e2fsck_strnlen(const char * s, int count); | ||
319 | #endif | ||
320 | |||
321 | /* | ||
322 | * Procedure declarations | ||
323 | */ | ||
324 | |||
325 | extern void e2fsck_pass1(e2fsck_t ctx); | ||
326 | extern void e2fsck_pass1_dupblocks(e2fsck_t ctx, char *block_buf); | ||
327 | extern void e2fsck_pass2(e2fsck_t ctx); | ||
328 | extern void e2fsck_pass3(e2fsck_t ctx); | ||
329 | extern void e2fsck_pass4(e2fsck_t ctx); | ||
330 | extern void e2fsck_pass5(e2fsck_t ctx); | ||
331 | |||
332 | /* e2fsck.c */ | ||
333 | extern errcode_t e2fsck_allocate_context(e2fsck_t *ret); | ||
334 | extern errcode_t e2fsck_reset_context(e2fsck_t ctx); | ||
335 | extern void e2fsck_free_context(e2fsck_t ctx); | ||
336 | extern int e2fsck_run(e2fsck_t ctx); | ||
337 | |||
338 | |||
339 | /* badblock.c */ | ||
340 | extern void read_bad_blocks_file(e2fsck_t ctx, const char *bad_blocks_file, | ||
341 | int replace_bad_blocks); | ||
342 | |||
343 | /* dirinfo.c */ | ||
344 | extern void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent); | ||
345 | extern struct dir_info *e2fsck_get_dir_info(e2fsck_t ctx, ext2_ino_t ino); | ||
346 | extern void e2fsck_free_dir_info(e2fsck_t ctx); | ||
347 | extern int e2fsck_get_num_dirinfo(e2fsck_t ctx); | ||
348 | extern struct dir_info *e2fsck_dir_info_iter(e2fsck_t ctx, int *control); | ||
349 | |||
350 | /* dx_dirinfo.c */ | ||
351 | extern void e2fsck_add_dx_dir(e2fsck_t ctx, ext2_ino_t ino, int num_blocks); | ||
352 | extern struct dx_dir_info *e2fsck_get_dx_dir_info(e2fsck_t ctx, ext2_ino_t ino); | ||
353 | extern void e2fsck_free_dx_dir_info(e2fsck_t ctx); | ||
354 | extern int e2fsck_get_num_dx_dirinfo(e2fsck_t ctx); | ||
355 | extern struct dx_dir_info *e2fsck_dx_dir_info_iter(e2fsck_t ctx, int *control); | ||
356 | |||
357 | /* ea_refcount.c */ | ||
358 | extern errcode_t ea_refcount_create(int size, ext2_refcount_t *ret); | ||
359 | extern void ea_refcount_free(ext2_refcount_t refcount); | ||
360 | extern errcode_t ea_refcount_fetch(ext2_refcount_t refcount, blk_t blk, | ||
361 | int *ret); | ||
362 | extern errcode_t ea_refcount_increment(ext2_refcount_t refcount, | ||
363 | blk_t blk, int *ret); | ||
364 | extern errcode_t ea_refcount_decrement(ext2_refcount_t refcount, | ||
365 | blk_t blk, int *ret); | ||
366 | extern errcode_t ea_refcount_store(ext2_refcount_t refcount, | ||
367 | blk_t blk, int count); | ||
368 | extern blk_t ext2fs_get_refcount_size(ext2_refcount_t refcount); | ||
369 | extern void ea_refcount_intr_begin(ext2_refcount_t refcount); | ||
370 | extern blk_t ea_refcount_intr_next(ext2_refcount_t refcount, int *ret); | ||
371 | |||
372 | /* ehandler.c */ | ||
373 | extern const char *ehandler_operation(const char *op); | ||
374 | extern void ehandler_init(io_channel channel); | ||
375 | |||
376 | /* journal.c */ | ||
377 | extern int e2fsck_check_ext3_journal(e2fsck_t ctx); | ||
378 | extern int e2fsck_run_ext3_journal(e2fsck_t ctx); | ||
379 | extern void e2fsck_move_ext3_journal(e2fsck_t ctx); | ||
380 | |||
381 | /* pass1.c */ | ||
382 | extern void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool); | ||
383 | extern int e2fsck_pass1_check_device_inode(ext2_filsys fs, | ||
384 | struct ext2_inode *inode); | ||
385 | extern int e2fsck_pass1_check_symlink(ext2_filsys fs, | ||
386 | struct ext2_inode *inode, char *buf); | ||
387 | |||
388 | /* pass2.c */ | ||
389 | extern int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir, | ||
390 | ext2_ino_t ino, char *buf); | ||
391 | |||
392 | /* pass3.c */ | ||
393 | extern int e2fsck_reconnect_file(e2fsck_t ctx, ext2_ino_t inode); | ||
394 | extern errcode_t e2fsck_expand_directory(e2fsck_t ctx, ext2_ino_t dir, | ||
395 | int num, int gauranteed_size); | ||
396 | extern ext2_ino_t e2fsck_get_lost_and_found(e2fsck_t ctx, int fix); | ||
397 | extern errcode_t e2fsck_adjust_inode_count(e2fsck_t ctx, ext2_ino_t ino, | ||
398 | int adj); | ||
399 | |||
400 | |||
401 | /* region.c */ | ||
402 | extern region_t region_create(region_addr_t min, region_addr_t max); | ||
403 | extern void region_free(region_t region); | ||
404 | extern int region_allocate(region_t region, region_addr_t start, int n); | ||
405 | |||
406 | /* rehash.c */ | ||
407 | errcode_t e2fsck_rehash_dir(e2fsck_t ctx, ext2_ino_t ino); | ||
408 | void e2fsck_rehash_directories(e2fsck_t ctx); | ||
409 | |||
410 | /* super.c */ | ||
411 | void check_super_block(e2fsck_t ctx); | ||
412 | errcode_t e2fsck_get_device_size(e2fsck_t ctx); | ||
413 | |||
414 | /* swapfs.c */ | ||
415 | void swap_filesys(e2fsck_t ctx); | ||
416 | |||
417 | /* util.c */ | ||
418 | extern void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size, | ||
419 | const char *description); | ||
420 | extern int ask(e2fsck_t ctx, const char * string, int def); | ||
421 | extern int ask_yn(const char * string, int def); | ||
422 | extern void e2fsck_read_bitmaps(e2fsck_t ctx); | ||
423 | extern void e2fsck_write_bitmaps(e2fsck_t ctx); | ||
424 | extern void preenhalt(e2fsck_t ctx); | ||
425 | extern char *string_copy(e2fsck_t ctx, const char *str, int len); | ||
426 | #ifdef RESOURCE_TRACK | ||
427 | extern void print_resource_track(const char *desc, | ||
428 | struct resource_track *track); | ||
429 | extern void init_resource_track(struct resource_track *track); | ||
430 | #endif | ||
431 | extern int inode_has_valid_blocks(struct ext2_inode *inode); | ||
432 | extern void e2fsck_read_inode(e2fsck_t ctx, unsigned long ino, | ||
433 | struct ext2_inode * inode, const char * proc); | ||
434 | extern void e2fsck_write_inode(e2fsck_t ctx, unsigned long ino, | ||
435 | struct ext2_inode * inode, const char * proc); | ||
436 | #ifdef MTRACE | ||
437 | extern void mtrace_print(char *mesg); | ||
438 | #endif | ||
439 | extern blk_t get_backup_sb(e2fsck_t ctx, ext2_filsys fs, | ||
440 | const char *name, io_manager manager); | ||
441 | extern int ext2_file_type(unsigned int mode); | ||
442 | |||
443 | /* unix.c */ | ||
444 | extern void e2fsck_clear_progbar(e2fsck_t ctx); | ||
445 | extern int e2fsck_simple_progress(e2fsck_t ctx, const char *label, | ||
446 | float percent, unsigned int dpynum); | ||