Many files:
pass1.c, pass2.c, pass3.c, pass4.c, pass5.c: Add calls to the progress
indicator function.
pass1.c (scan_callback): Add call to the progress feedback function
(if it exists).
super.c (check_super_block): Skip the device size check if the
get_device_size returns EXT2_EXT_UNIMPLEMENTED.
iscan.c (main): Don't use fatal_error() anymore.
pass1b.c, swapfs.c, badblocks.c: Set E2F_FLAG_ABORT instead of calling
fatal_error(0).
problem.c, pass3.c (PR_3_ROOT_NOT_DIR_ABORT,
PR_3_NO_ROOT_INODE_ABORT): New problem codes.
problem.c, pass2.c (PR_2_SPLIT_DOT): New problem code.
problem.c, pass1.c (PR_1_SUPPRESS_MESSAGES): New problem code.
problemP.h: New file which separates out the private fix_problem data
structures.
util.c, dirinfo.c, pass1.c, pass1b.c, pass2.c, pass5.c, super.c,
swapfs.c util.c: allocate_memory() now takes a e2fsck context as its
first argument, and rename it to be e2fsck_allocate_memory().
problemP.h:
New file which contains the private problem abstraction definitions.
Makefile.pq:
Remove include of MAKEFILE.STD, which doesn't exist at this point.
diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
index 4facc60..85a857b 100644
--- a/e2fsck/pass2.c
+++ b/e2fsck/pass2.c
@@ -63,6 +63,7 @@
struct check_dir_struct {
char *buf;
struct problem_context pctx;
+ int count, max;
e2fsck_t ctx;
};
@@ -97,7 +98,8 @@
ctx->flags |= E2F_FLAG_ABORT;
return;
}
- buf = allocate_memory(fs->blocksize, "directory scan buffer");
+ buf = e2fsck_allocate_memory(ctx, fs->blocksize,
+ "directory scan buffer");
/*
* Set up the parent pointer for the root directory, if
@@ -110,6 +112,8 @@
cd.buf = buf;
cd.ctx = ctx;
+ cd.count = 0;
+ cd.max = ext2fs_dblist_count(fs->dblist);
cd.pctx.errcode = ext2fs_dblist_iterate(fs->dblist, check_dir_block,
&cd);
@@ -177,9 +181,8 @@
if (dirent->rec_len > 12) {
new_len = dirent->rec_len - 12;
if (new_len > 12) {
- preenhalt(ctx);
if (created ||
- ask(ctx, "Directory entry for '.' is big. Split", 1)) {
+ fix_problem(ctx, PR_2_SPLIT_DOT, pctx)) {
nextdir = (struct ext2_dir_entry *)
((char *) dirent + 12);
dirent->rec_len = 12;
@@ -280,6 +283,9 @@
buf = cd->buf;
ctx = cd->ctx;
+
+ if (ctx->progress)
+ (ctx->progress)(ctx, 2, cd->count++, cd->max);
/*
* Make sure the inode is still in use (could have been
@@ -553,7 +559,7 @@
/*
* Fix up the bitmaps...
*/
- read_bitmaps(ctx);
+ e2fsck_read_bitmaps(ctx);
ext2fs_unmark_inode_bitmap(ctx->inode_used_map, ino);
ext2fs_unmark_inode_bitmap(ctx->inode_dir_map, ino);
if (ctx->inode_bad_map)
@@ -691,7 +697,7 @@
* Read the inode and block bitmaps in; we'll be messing with
* them.
*/
- read_bitmaps(ctx);
+ e2fsck_read_bitmaps(ctx);
/*
* First, find a free block