1999-10-22    <tytso@valinux.com>

	* Release of E2fsprogs 1.16

1999-10-22    <tytso@valinux.com>

	* pass2.c (check_filetype): If the filetype filesystem feature is
		not set, and a directory entry has a dirent feature, offer
		to clear it (since 2.0 kernels will do complain will
		interpret it as a very large name length field).

	* problem.c (PR_2_CLEAR_FILETYPE): Add new problem code.

1999-10-21    <tytso@valinux.com>

	* e2fsck.8.in: Update man page to use a more standard format (bold
		option flags and italicized variables), as suggested by
		Andreas Dilger (adilger@enel.ucalgary.ca)

	* pass4.c (e2fsck_pass4): If an inode is set in the
		inode_imagic_map bitmap, don't check to see if it is
		disconnected from the inode tree (because it almost
		certainly will be).  Free inode_imagic_map at the end of
		pass 4.

	* pass2.c (check_dir_block, check_filetype): If the FILETYPE
		feature is set, check the directory entry's filetype
		information field, and fix/set it if necessary.
		(e2fsck_pass2): Free the inode_reg_map bitmap at the end
		of pass 2.

	* pass1.c (e2fsck_pass1, alloc_imagic_map): Allocate and fill in
		information for inode_reg_map and inode_imagic_map, which
		indicates which inodes are regular files and AFS inodes,
		respectively.
		Since only the master superblock is written during a
		restart, force that superblock to be used after a restart;
		otherwise changes to the block group descriptors end up
		getting ignored.

	* problem.c, problemP.h: If e2fsck is run -n, make def_yn variable
		be 0 for "no".  Add support for a new flag, PR_NO_NOMSG,
		which supresses the problem message if e2fsck is run with
		the -n option.

	* problem.c, problem.h (PR_2_SET_FILETYPE, PR_2_BAD_FILETYPE): Add
		new problem codes.

	* message.c (expand_dirent_expression): Add support for %dt which
		prints the dirent type information.

	* e2fsck.c (e2fsck_reset_context): Free new bitmaps (inode_reg_map
		and inode_imagic_map).

	* e2fsck.h (e2fsck_t): Add new inode_reg_map and inode_magic_map
		to the context structure.
	
1999-09-24    <tytso@valinux.com>

	* unix.c (PRS), util.c (ask_yn): Add #ifdef's to make
		e2fsprogs easier to port to non-Unix platforms.

1999-09-07    <tytso@valinux.com>

	* pass3.c (adjust_inode_count): Fix bug where we didn't keep the
		internal and external inode counts in sync when we
		decremented an inode whose link count was already zero.
		Now we skip incrementing or decrementing both link counts
		if we would cause an overflow condition.
		(expand_dir, expand_dir_proc): Change where we update the
		inode block count and size files so that the block count
		field is updated correctly when we create an indirect block.

1999-08-05    <tytso@valinux.com>

	* super.c (check_super_block): Check to see whether the
		inodes_per_group value in the superblock is insanely too
		high.

1999-08-02    <tytso@valinux.com>

	* pass1b.c (clone_file_block): Don't clear the dup_map flag if
		the block also shares data with the fs metadata when
		the count drops to 1, since the block should still be
		cloned, as fs metadata isn't included in the count.

1999-07-18  Theodore Ts'o  <tytso@valinux.com>

	* Release of E2fsprogs 1.15

1999-07-19    <tytso@valinux.com>

	* unix.c (usage): Add minimalist emergency help to the usage
		message. 

1999-07-18    <tytso@valinux.com>

	* unix.c: Add support for calculating a progress bar if the -C0
		option is given.   The function e2fsck_clear_progbar()
		clears the progress bar and must be called before any
		message is issued.  SIGUSR1 will enable the progress bar,
		and SIGUSR2 will disable the progress bar.  This is used
		by fsck to handle parallel filesystem checks.  Also, set
		the device_name from the filesystem label if it is
		available. 

	* e2fsck.h: Add new flags E2F_FLAG_PROG_BAR and
		E2F_FLAG_PROG_SUPRESS.  Add new field in the e2fsck
		structure which contains the last tenth of a percent
		printed for the user.

	* message.c (print_e2fsck_message): Add call to
		e2fsck_clear_progbar(). 

	* pass1.c (e2fsck_pass1):
	* pass2.c (e2fsck_pass2):
	* pass3.c (e2fsck_pass3):
	* pass4.c (e2fsck_pass4):
	* pass5.c (e2fsck_pass5): Add call to e2fsck_clear_progbar when
		printing the resource tracking information.

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): If there is
		an error in the bitmaps, suppress printing the progress
		bar using the suppression flag for the remainder of the
		check, in order to clean up the display.

1999-06-30    <tytso@valinux.com>

	* unix.c (check_mount): Clean up the abort message displayed when
		the filesystem is mounted and either stdout or stdin isn't
		a tty.

1999-06-25    <tytso@valinux.com>

	* e2fsck.h:
	* pass1.c (pass1_get_blocks, pass1_read_inode, pass1_write_inode, 
		pass1_check_directory, e2fsck_use_inode_shortcuts): Make
		pass1_* be private static functions, and create new
		function e2fsck_use_inode_shortcuts which sets and clears
		the inode shortcut functions in the fs structure.

	* e2fsck.h:	
	* pass2.c (e2fsck_process_bad_inode): Make process_bad_inode() an
		exported function.

	* pass4.c (e2fsck_pass4): Call e2fsck_process_bad_inode to check
		if a disconnected inode has any problems before
		connecting it to /lost+found.  Bug and suggested fix by 
		Pavel Machek <pavel@bug.ucw.cz>

1999-06-21    <tytso@valinux.com>

	* unix.c (main): Add missing space in the disk write-protected
		message. 

1999-05-22    <tytso@rsts-11.mit.edu>

	* problem.c, problem.h (PR_0_INODE_COUNT_WRONG): Add new problem
		code. 
	
	* super.c (check_super_block): Add check to make sure the total
		number of inodes is sane, since this can be calculated
		from the number of groups times the number of inodes per
		group.   Offer to correct it if it is incorrect.

1999-03-19    <tytso@rsts-11.mit.edu>

	* pass5.c (check_block_end): Fix fencepost condition where when
		clearing the block padding we were missing the last position
		in the bitmap.

1999-05-17    <tytso@rsts-11.mit.edu>

	* unix.c (reserve_stdio_fds): Add safety check in case
		reserve_stdio_fds couldn't open /dev/null.

1999-03-14  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* util.c (print_resource_track): Use mallinfo if present to get
		more accurate malloc statistics.

	* pass3.c (get_lost_and_found): Check to see if lost+found is a
		plain file; if so, offer to unlink it.

	* problem.c, problem.h (PR_3_LPF_NOTDIR): Add new problem code.

1999-03-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c: Fix problem message for PR_1_BAD_GROUP_DESCRIPTORS so
		that the block group number is printed.  Add new prompt,
		PROMPT_UNLINK.

1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.14

1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* message.c (safe_print): New function which prints strings,
		converting non-printable characters using the '^' and
		M-notation.  This function is now used to print directory
		name entries and pathnames.

Mon Jan  4 02:28:59 1999  Theodore Y. Ts'o  <tytso@mit.edu>

	* unix.c (main): Reset the context before calling ext2fs_close(),
		to avoid referencing already freed memory.

1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.13

1998-12-03  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in: Updated dependencies.

1998-11-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (get_lost_and_found): If the filesystem is not opened
		read-only, then force /lost+found to be created if it is
		not present.

	* problem.c: Allow PR_3_NO_LF_DIR to be handled during a preen
		operation. 

1998-10-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): Move ext2fs_close() after e2fsck_free_context()
		since e2fsck_free_context may reference data in ctx->fs.

	* e2fsck.c (e2fsck_reset_context): Make sure ctx->fs is non-NULL
		before checking ctx->fs->dblist.

1998-10-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (e2fsck_pass1): Use the device check subroutine on
		FIFO's and Socket's, so that we catch bogus immutable inodes.

	* pass2.c (process_bad_inode): Process bad socket and fifo's.

	* problem.h, problem.c: Define new problem codes PR_2_BAD_FIFO and
		PR_2_BAD_SOCKET.

1998-09-02  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c: Add PR_3_NO_DIRINFO error code.

	* super.c (check_super_value): Rename min and max to min_val and
		max_val to avoid possible cpp macro conflicts.

	* pass4.c (e2fsck_pass4): Rename max to maxgroup, to avoid
		possible cpp macro conflicts.
	
	* pass3.c (e2fsck_pass3): Rename max to maxdirs, to avoid possible
		cpp macro conflicts.
		(check_directory): Fix logic to avoid possible core dump
		in the case of ext2fs_get_dir_info returning NULL.  (By
		the time we get here, it should never happen, but...).
		Also simply/streamline the control flow of the function.

1998-08-17  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (check_if_skip): Move the "not cleanly mounted" check
		ahead of the maximal mount and too long since checked tests.
		(reserve_stdio_fds): Make sure 0,1,2 file descriptors are
		open, so that we don't open the filesystem using the same
		file descriptor as stdout or stderr.

1998-08-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (e2fsck_pass2): Fix the progress accounting so that we
		get to 100%.

	* pass3.c (e2fsck_pass3): Change progress accounting to be
		consistent with the other e2fsck passes.		

	* e2fsck.c (e2fsck_run): At the end of each pass, call the
		progress function with the pass number set to zero. 

	* unix.c (e2fsck_update_progress): If the pass number is zero,
		ignore the call, since that indicates that we just want to
		deallocate any progress structures.

1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.12

1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): Fix typo in checking the incompat feature set; it
		should be checked against EXT2_LIB_FEATURE_INCOMPAT_SUPP.

1998-07-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.c (test_disk): Don't clear the existing bad blocks
		list when using e2fsck -c, since it may cause blocks with
		marginal errors to be dropped from the bad blocks list.

Mon Jul  6 10:32:11 1998  Theodre Ts'o  <tytso@lurch.mit.edu>

	* pass1.c (e2fsck_pass1): Use ext2fs_sb structure for
		compatibility with older kernels.

1998-06-25  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (e2fsck_update_progress): Remove unused variables.

1998-06-10  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, problem.h: Change blkcnt_t to be e2_blkcnt_t to avoid
		collision with LFS API.

	* pass1.c (e2fsck_pass1): Fix bug so that ext2_max_sizes is
		properly initialized.  
		(e2fsck_pass1): Don't allow the the boot loader inode to
		be a directory (clear the inode mode field if so).

1998-05-07  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (PRS): Added new option -C, which causes e2fsck to print
		progress updates so that callers can keep track of the
		completion progress of e2fsck.  Designed for use by
		progress, except for -C 0, which prints a spinning report
		which may be useful for some users.

	* pass5.c (e2fsck_pass5): Use a finer-grained progress reporting
		scheme (useful for larger filesystems).

	* e2fsck.h: Add progress_fd and progress_pos, for use by the Unix
		progress reporting functions.

1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_inode_cmp): Use EXT2_QSORT_TYPE to define the
		appropriate return type for comparison functions for qsort.

	* e2fsck.h: Add #ifdef protection for unistd.h

	* super.c: Remove header files already included by e2fsck.h

1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c (e2fsck_add_dir_info): Update function to pass the old
		  size of the memory to be resized to ext2fs_resize_mem().

1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in: Change to use new installation directory variables
		convention.  Fix uninstall rules to take $(DESTDIR) into
		account.  Remove cat8dir from the installdirs target,
		since modern man package don't necessarily put the cat
		directory in /usr/man/cat?.

1998-03-29  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c, e2fsck.h: Always declare e2fsck_get_device_size() as an
		extern in e2fsck.h to prevent -Wall warnings.

	* pass4.c (e2fsck_pass4): Remove unused variable 'j'.

1998-03-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c (check_super_block): Fix broken superblock sanity check
		when calculating blocks_per_group if s_log_frag_size !=
		s_log_block_size.  Since we don't support fragments, this
		isn't a bug deal, but it's good to get it fixed.

1998-03-23  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c: Fix bug in check of feature set, to make sure we can
		really fix this filesystem.

	* problem.h: Make blkcount type to be of type blkcnt_t.  Make the
		num field be a 64 bit type.  Add the problem code
		PR_1_FEATURE_LARGE_FILES

	* problem.c: Add table entry for the problem code
		PR_1_FEATURE_LARGE_FILES.

	* pass1.c (e2fsck_pass1): A non-zero i_dir_acl field is only
		a problem for directory inodes.  (Since it is also
		i_size_high now.)   If there are no large_files, then
		clear the LARGE_FLAG feature flag.  If there are
		large_files, but the LARGE_FLAG feature flag is not set,
		complain and offer to fix it.
		(check_blocks): Add support to deal with non-directory
		inodes that have i_size_high set (i.e., large_files).
		Don't give an error if a directory has preallocated
		blocks, to support the DIR_PREALLOC feature.
		(process_block, process_bad_block): The blockcnt variable
		is a type of blkcnt_t, for conversion to the new
		block_iterate2.

	* pass2.c (process_bad_inode): A non-zero i_dir_acl field is only
		a problem for directory inodes.  (Since it is also
		i_size_high now.)

	* message.c (expand_inode_expression): Print a 64-bits of the
		inode size for non-directory inodes.  (Directory inodes
		can only use a 32-bit directory acl size, since
		i_size_high is shared with i_dir_acl.)  Add sanity check
		so that trying to print out the directory acl on a
		non-directory inode will print zero.
		(expand_percent_expression): %B and %N, which print 
		pctx->blkcount and pctx->num, can now be 64 bit
		variables.  Print them using the "%lld" format if
		EXT2_NO_64_TYPE is not defined.

	* e2fsck.h: Add the large_flagsfield to the e2fsck context.

	* e2fsck.c (e2fsck_reset_context): Clear the large_flags
		field.

Sun Mar  8 23:08:08 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (fix_dotdot_proc): 
	* pass2.c (check_dot, check_dotdot, check_name, check_dir_block): 
	* message.c (expand_dirent_expression): Mask off the high eight
		bits of the directory entry's name_len field, so that it
		can be used for other purposes.

Fri Feb 27 00:01:39 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (e2fsck_run): Since E2F_FLAG_SIGNAL_MASK doesn't
 		include EXT2_FLAG_RESTART anymore, we need to adjust this
 		routine so that it *does* return in the case of it seeing
 		EXT2_FLAG_RESTART.

	* pass1.c (e2fsck_pass1): ext2_get_next_inode() may call the group
		done callback function, which may set context abort
		flags.  So we need to test the context abort flags after
		we call ext2_get_next_inode().
		(process_inodes): If we abort due out of process_inodes,
		do a clean exit by breaking out of the for loop instead of
		just returning.

	* e2fsck.h (E2F_FLAG_SIGNAL_MASK): EXT2_FLAG_RESTART shouldn't be
		considered a SIGNAL mask (i.e., requiring an immediate
		abort of processing to restart).  FLAG_RESTART just means
		that we want to restart once pass 1 is complete.

Tue Feb 24 15:19:40 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Change the progress function to return an integer; if returns 1,
		then the progress function is expected to have set the
		e2fsck context flag signalling a user abort, and the
		caller should also initiate a user abort.

Tue Feb 17 19:03:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): Don't call
		end_problem_latch() unless there was actually a problem
		latched.  Simplifies semantics of the latch processing.

Mon Feb 16 17:31:44 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.h: Add new field, priv_data to the e2fsck context
 		structure.  It should be used by callers of the e2fsck
 		functions only, and not by anything in e2fsck itself.

Mon Feb 7 17:31:04 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c: Instead of call ext2fs_get_device_size(), define and call
		e2fsck_get_device_size().  (This function may be stubbed
		out in special versions of e2fsck.)

	* pass3.c, pass4.c: Remove extra calls to the progress function
		that weren't needed.

	* mke2fs.8.in: Update man page to note that the format of the bad
		block file is the same as the one generated by badblocks. 

Sun Feb  1 07:57:14 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c, e2fsck.c: Don't include com_err.h; it isn't needed.

	* e2fsck.h: Include <time.h> since it is needed

	* super.c: If EXT2_SKIP_UUID is defined, then skip the UUID
		processing. 

Tue Jan 20 15:37:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): In the case where the filesystem revision is too
 		high, print the message about the superblock possibly
 		being corrupt.

	* e2fsck.8.in: Add expanded comments about how the -b option
		works. 

Sat Jan 17 13:02:16 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.h: If EXT2_FLAT_INCLUDES is defined, then assume all of
 		the ext2-specific header files are in a flat directory.

	* dirinfo.c, ehandler.c, pass1.c, pass1b.c, pass2.c, pass5.c,
 		super.c, swapfs.c, unix.c: Explicitly cast all assignments
 		from void * to be compatible with C++.

Tue Jan  6 11:30:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (sync_disk): Remove sync_disk and calls to that function,
		since ext2fs_close() now takes care of this.

Mon Dec 29 14:45:42 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, pass1b.c, pass2.c, pass3.c, swapfs, badblocks.c,
 		ehandler.c, unix.c: Change use of private to be priv_data,
 		to avoid C++ reserved name clash.

Fri Nov 28 09:30:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c (e2fsck_add_dir_info): Use ext2fs_get_num_dirs instead
		of e2fsck_get_num_dirs, which has been removed.

Tue Nov 25 15:54:35 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (PROGS): Remove @EXTRA_PROGS@, since we don't want
		to compile and install flushb.

Mon Nov 24 06:48:00 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (e2fsck_pass1_check_device_inode): For now, only check
		to make sure the extra i_blocks in a device are cleared if
		the immutable flag is set.

	* util.c (print_resource_track): Fix typo which caused the
 		time/resource tracking to print "Pass 1 :" instead of
 		"Pass 1: ".

Thu Nov 20 16:02:23 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (expand_directory): Fix bug which could cause core dump
 		when expanding the directory, and the bitmaps hadn't yet
 		been read in.  Also, only use ext2fs_write_dir_block when
		writing a directory block, not when writing out a fresh
		indirect block.

Wed Nov 19 16:15:44 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_bad_block): Fix bug where first_block wasn't
		getting incremented, which caused user to get a
		"Programming error?" warning if there was a bad block in a
		non-primary superblock/group_descriptor.  Also fixed
		another bug so that ext2fs_bg_has_super() is consulted, to
		avoid problems when using a filesystem with the
		sparse_groups option set and there are bad blocks at the
		beginning of a group which doesn't have a superblock.

Thu Nov  6 16:10:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* 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).

Tue Nov  4 09:45:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* 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().

Mon Nov  3 14:35:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (main): Add a special case check for the error code EROFS
		and display an appropriate error message for this case.

	* [lots of files]:  Change ext2fs_read_inode, ext2fs_write_inode
		to take the e2fsck context as their first argument.
		Change dir_info.c routines to take an e2fsck_context,
		renamed them to start with e2fsck_ to avoid namespace
		issues, and changed them to store the directory
		information inside the e2fsck context.
		Added e2fsck_run() which calls all of the e2fsck passes in
		the correct order, and which handles the return of abort
		codes.  Added abort processing, both via setjmp/longjmp
		and via flags in the e2fsck context.  Use a flag in the
		e2fsck context instead of the restart_e2fsck global
		variable.   Change uses of free and malloc to
		ext2fs_free_mem and ext2fs_get_mem.
	
Fri Oct 31 01:12:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c, pass3.c: Rename new error codes to _ET_ in them for
	 	consistency.

Sat Oct 25 00:10:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass3.c (get_lost_and_found): Check error return of 
		EXT2_FILE_NOT_FOUND instead of ENOTDIR

	* pass1.c (pass1_check_directory): Return EXT2_NO_DIRECTORY
		instead of ENOTDIR

Fri Oct 24 00:12:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix.c (PRS): Make the variable which getopt returns into be
		an int, so that it won't lose on platforms where char is
		unsigned. 

	* pass1b.c (clone_file): Fix bug in error reporting in the case
 		where cs.errcode is non-zero.

Sun Oct 19 21:12:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass*.c, super.c, unix.c, util.c, e2fsck.h: Place #ifdef
		RESOURCE_TRACK around code which uses init_resource_track
		and print_resource_track.  (Not all systems have timeval)

	* super.c: Remove excess #includes which are not necessary.

	* e2fsck.h: Add #ifdef's for HAVE_SYS_TYPES_H and HAVE_SYS_TIME_H

Fri Oct  3 13:40:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass*.c, super.c: Massive changes to avoid using printf and
		com_err routines.   All diagnostic messages are now routed
		through the fix_problem interface.

Sat Sep  6 17:13:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (check_dir_block): Check for duplicate '.' and '..'
		entries. 

	* problem.c, problem.h: Add new problem codes PR_2_DUP_DOT and
	 	PR_2_DUP_DOT_DOT.

Tue Sep  2 09:04:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c: Added new problem codes for some of the
		superblock corruption checks, and for the pass header
		messages.  ("Pass 1: xxxxx")

	* util.c (print_resource_track): Now takes a description
		argument. 

Mon Aug 25 10:23:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* super.c, unix.c, e2fsck.c: New files to separate out the
		operating-specific operations out from e2fsck.c.  
		e2fsck.c now contains the global e2fsck context management
		routines, and super.c contains the "pass 0" initial
		validation of the superblock and global block group
		descriptors. 

	* pass1.c, pass2.c, pass3.c, pass4.c, pass5.c, util.c: Eliminate
		(nearly) all global variables and moved them to the e2fsck
		context structure.

	* problem.c, problem.h: Added new problem codes PR_0_SB_CORRUPT,
 		PR_0_FS_SIZE_WRONG, PR_0_NO_FRAGMENTS,
 		PR_0_BLOCKS_PER_GROUP, PR_0_FIRST_DATA_BLOCK

Thu Aug 14 10:55:21 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* message.c: Add compression for the word "Illegal"

	* problem.c: Added entries for PR_2_BAD_CHAR_DEV and
	 	PR_2_BAD_BLOCK_DEV

Wed Aug 13 09:55:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1, check_device_inode), pass2.c
 		(process_bad_inode): Use a more stringent test for a valid
 		device.

Sun Aug 10 18:58:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount): Add stronger warning message about the
		perils of running e2fsck on a mounted filesystem.

Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.11

Thu Jun 12 00:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (mark_table_blocks): Mark the superblock and group
		descriptor blocks first, so that any conflicts between
		these and the bitmap or inode table blocks is noticed.

	* problem.c: Fix message printed out when a block or inode bitmap
		conflicts with other fs data, has the correct group number
		in it.

Tue Jun 10 12:07:37 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (pass2): Check the error return from ext2fs_dblist_iterate.

Thu May  8 22:45:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.8.in: Fix minor typos and grammer oops found by Bill
 		Hawes (whawes@star.net).

	* badblocks.c (read_bad_blocks_file): Pass the blocksize to the
		bad blocks command so that all of the filesystem gets
 		tested in the case where the blocksize 2048 or 4096.

Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* Release of E2fsprogs version 1.10

Mon Apr 21 22:43:08 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1b.c (pass1b): While scanning for inodes, simply skip inodes
 		where ext2fs_get_next_inode returns the 
 		EXT2_ET_BAD_BLOCK_IN_INODE_TABLE error.

Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.09

Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.08

Thu Apr 10 13:51:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1b.c (clone_file_block): If we clone a directory, we need to
		update the dblist entry so that we check (and correct) the
		right directory block.

Sun Apr  6 09:13:12 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_block): Don't clear blocks references to
		filesystem metadata; let pass 1B handle this case.

	* problem.c, problem.h: Add new problem, PR_1B_SHARE_METADATA.

	* pass1b.c (pass1d): Deal with a block which is shared with
 		filesystem metadata.

	* e2fsck.h: Make block_illegal_map be a global variable

Sat Apr  5 11:51:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c, pass1.c (mark_table_blocks): Support the sparse_super
	 	feature.
		(get_backup_sb): New function which attempts to obtain the
	 	correct backup superblock (if possible).

Fri Apr  4 10:46:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): Check the version of the library, and warn if
		the library is out of date; this happens generally due to
		users who manually install e2fsprogs.

	* pass1.c (pass1_get_blocks): If the passed in inode number for
 		get_blocks isn't what we're expecting pass back
 		EXT2_ET_CALLBACK_NOT_HANDLED.

Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs version 1.07

Tue Mar 11 10:31:47 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* icount.c: New file which implements an inode count abstraction.
		This significantly reduces amount of memory needed to
		check really large filesystems.

	* pass1.c, pass2.c, pass3.c, pass4.c: Modified to use the icount
	 	abstraction.

Fri Mar  7 08:28:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dirinfo.c (dir_info_iter): New function which allows iteration
		over the directories in the dir_info map.

	* pass3.c (pass3, check_directory): Speed up pass 3 by iterating
		over all directories in the dir_info structure, instead of
		iterating all inodes looking for directories, and then
		looking up the directories using get_dir_info().

Sat Feb  1 11:33:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1, process_block): 
	* pass2.c (pass2): Use the ext2_dblist abstraction instead of
		manual code to manage the directory block list information.

	* pass1.c (check_blocks), pass1b.c (pass1b), pass2.c
	 	(deallocate_inode): Call the ext2 library routine
 	 	ext2_inode_has_valid_blocks() instead of
 	 	inode_has_valid_blocks().

	* swapfs.c (swap_inodes): Add check so that we don't try to call
		swap_inode_blocks unless the inode has valid blocks.
		(Otherwise a long fast symlink might cause
		swap_inode_blocks to erroneously get called.)

Wed Jan 22 14:42:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c, problem.h: Added entries for PR_2_DOT_NULL_TERM and
 	 	PR_2_DOT_DOT_NULL_TERM.

	* pass2.c (check_dot, check_dot_dot): Make sure the new . and
 		.. entries are null-terminated, since the 2.0 kernel
 		requires this (for no good reason).

Mon Jan 20 20:05:11 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1): Set the EXT2_SF_SKIP_MISSING_ITABLE flag so
		that we can recover from missing inode tables.

	* dirinfo.c (get_dir_info): If there are no directories in the
 		dir_info abstraction, don't core dump (because dir_info is
 		NULL).

	* e2fsck.c (main): Don't try using the backup superblocks if there
		aren't any.
		(check_super_block): If there are illegal inode table or
		bitmaps, set the filesystem as being in error.

Wed Jan 15 11:32:01 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass2.c (check_dir_block): Added check to make sure that rec_len
 		is a a multiple of 4 (so that the directory entries are
 		4-byte aligned).

Sat Dec 28 12:16:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (uninstall): Uninstall all programs in the PROGS
		line.
		(PROGS): Don't build and install the extend program by
		default. 
	

Sat Dec  7 16:41:02 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_inodes): Make sure the stashed_ino variable is
 		saved and restored as well.
		(pass1): For fast sym links, skip the check_blocks
		processing step altogether.

Mon Dec  2 09:28:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* problem.c, message.c: New files, to completely refurbish how
		filesystem problems are reported to the user.  The
		diagnostic messages are now encoded out in an easily
		customizable, extensible format.  The messages printed out
		in preen mode are all on one line, and contain the device
		name.

Fri Nov 29 20:26:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* swapfs.c (swap_inodes): When swapping a filesystem, ignore
		deleted files.

	* pass1.c (pass1): Ignore missing inode table errors during the
		scan, and just skip past those inodes.

	* pass3.c (check_root): Remove root_ino argument, and assume that
		the root inode must be EXT2_ROOT_INO.  Move responsibility
		of setting the parent of the root inode in the directory
		inode structure to pass2().

	* pass2.c (check_dir_block): Don't allow links to the root
		directory.  

	* dirinfo.c (add_dir_info): Remove last argument to add_dir_info,
		since the inode is no longer used.

Tue Oct 15 00:06:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): If the superblock magic number is wrong, or the
		block group fails a sanity check, then automatically
		restart trying to use the backup superblocks.

	* pass1.c (mark_table_blocks): Make the inode tables ahead of
		everything else; in the case where a bitmap block overlays
		the inode table, the inode table should take precedence.

	* pass2.c (maybe_clear_entry): Make the deleted/unused error
		message fit on one line, since the error can happen during
		a preen pass.  (We eventually need to revamp the whole
		e2fsck error reporting and prompting system, but that's a
		job for another day.)

Mon Oct 14 22:29:49 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): Read in the list badblocks into fs->badblocks
		for the benefit of the inode scan functions. 

	* pass1.c (pass1): If ext2fs_get_next_inode() returns an error
		indicating that an inode is in a bad block, mark that
		inode as being used, as well as in the inode "bb" map.

	* pass2.c (maybe_clear_entry): New function which generalizes the
 		error cases when a directory entry needs to be cleared.
		(check_dir_block): If an inode is in the "bb" map, offer
 		to clear the directory entry, since the inode is in a bad
 		block.

	* pass4.c (pass4): If an inode is marked as used, but is is marked
		in the "bb" map, don't process it as a disconnected inode.

Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.06

Mon Oct  7 00:45:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): Print out the version number of the shared
		library when using the -V option.

	* swapfs.c (swap_filesys): Change EXT2_SWAP to EXT2_FLAG_SWAP for
	 	consistency's sake.

	* e2fsck.c (main): By setting EXT2_FLAG_MASTER_SB_ONLY, only write
 		out the backup superblocks when we know we have a valid
 		filesystem.

Tue Oct  1 22:00:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* util.c (preenhalt): Make it explicit on preenhalt that running
		e2fsck manually means without the -a or -p flag.

Fri Sep 27 14:41:08 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1): Add support for the EXT2_BOOT_LOADER inode.
		(Linux/FT actually sets the mode bits, so we have to
		handle it specially.)

	* e2fsck.c (check_if_skip): Print a message if the filesystem is
 		just dirty, so that the user knows that it's about to be
 		checked (since this will take a while).

Mon Sep 16 17:00:01 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass4.c: If a disconnected inode is zero-length, prompt to
		delete it instead of connecting it to lost+found.

Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.05

Fri Aug 30 20:24:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass4.c (pass4): If the user refuses to connect an unattached
		inode to lost+found, don't try to set i_links_count.  This
		is bad, since if the user says yes, the inode will be
		marked as unused, which is not necessarily the right
		thing, especially since the rest of the cleanup doesn't
		happen here.

	* pass2.c (deallocate_inode): Set inode_link_info[ino] when
		dellocating an inode.  (Not strictly necessary, but...)

	* pass4.c (pass4): Add "bonehead" explanation to the "programming
		error" message.

Tue Aug 27 11:26:32 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (PRS,main): Added new options -s and -S.  -s will
 		byte-swap the filesystem so that it is normalized.  -S
 		will byte-swap the filesystem regardless of its current
 		byte-order.

	* swapfs.c: New file, which will byte-swap a filesystem.

Tue Aug 20 09:41:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (pass1): Change handling on files with non-zero dtime
		and non-zero i_link_count; before we treated them as
		deleted file per botched ext2 0.3c kernel behavior.  We
		now clear dtime instead.

Mon Aug 19 23:33:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (main): If e2fsck sets the clean bit, even if
		nothing else is changed, make sure FSCK_NONDESTRUCT is
		set (since after all having the filesystem set to
		invalid is an error.  :-)

Fri Aug  9 10:25:13 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pass1.c (process_block): Make sure that meta data doesn't get
		accidentally set in the dir_blocks array (which could
		happen in some error condtions).
	
	* pass1.c (pass1): 
	* pass2.c (process_bad_inode): Check for fragments in a
		OS-independent fashion.

Thu Aug  8 15:20:54 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_if_skip): Close the filesystem when skipping the
		cleanup for the filesystem.

Mon Jul 22 22:03:28 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c: Improve corrupt_msg, so that it's less confusing.

Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.04

Wed May 15 21:41:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsck.c (relocate_hint): Issue a hint that the user may wish to
		try "e2fsck -b 8193" before allowing e2fsck to relocate
		inode table blocks.

	* Makefile.in (e2fsck): Build e2fsck statically or dynamically
		depending on the option to configure.  Added targets for
		e2fsck.static and e2fsck.shared for people who want to
		build a static or shared variant manually.

Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.03

Tue Mar 26 12:03:42 1996    <tytso@rsts-11.mit.edu>

	* e2fsck.c (show_stats): Don't use floating point to display
		percentage of non-contiguous files, as different libc
		handle result truncation differently, and this causes the
		test suite to bomb out depending on which libc you are
		using.

	* util.c (allocate_memory): Fix error message to omit extraneous
		%%s.

Tue Mar  5 03:50:40 1996    <tytso@rsts-11.mit.edu>

	* pass4.c (pass4): 
	* pass2.c (check_dir_block): 
	* pass1.c (pass1): Add support for dynamic first inode revision.

Wed Feb 14 16:27:30 1996    <tytso@rsts-11.mit.edu>

	* pass3.c (check_root): Fix spelling typo

Mon Feb  5 22:30:30 1996    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_super_block): If the superblock fails certain
		internal consistency checks, exit with a fatal error after
		printing the "superblock is corrupt message".

Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.02

Wed Dec 15 21:24:26 1996    <tytso@rsts-11.mit.edu>

	* pass1.c (process_block): Check to see if a file is "fragmented".
		i.e., non-contiguous.  Note that any file which is larger
		than the block group is guaranteed to be non-contiguous.
		We may want to use a different hueristic for deciding
		whether or not a file is "fragmented".

	* e2fsck.c (show_stats): Print statistics of how many
		non-contiguous files are on the system.

Fri Dec 15 19:19:47 1995    <tytso@rsts-11.mit.edu>

	* badblocks.c (read_bad_blocks_file, test_disk): Fold
		functionality of test_disk() (which runs badblocks) into
		read_bad_blocks_file(); test_disk() now calls
		read_bad_blocks_file() with a NULL bad_blocks_file
		argument.

Mon Nov 20 18:30:10 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount): Use #if defined(__linux__) instead of
		#if defined(linux).  The latter won't work if we're
		compiling -ansi.

Mon Oct 30 20:31:17 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount): For Linux systems, the check to see if
		the root is mounted read-only has to be done for all
		filesystems, not just for the root filesystem, due to the
		way that some /etc/rc scripts are set up.

Thu Oct 26 12:05:30 1995    <tytso@rsts-11.mit.edu>

	* Makefile.in (install): Strip programs when they are installed.
		(e2fsck): Build e2fsck statically.

Wed Oct 25 21:18:16 1995    <tytso@rsts-11.mit.edu>

	* util.c (preenhalt): Preenhalt now takes an argument, which is an
		ext2fs_filsys; this allows it to set the EXT2_ERROR_FS
		flag in the superblock in cases where preenhalt is called.
		All calls to preenhalt() were changed to either
		preenhalt(fs) or preenhalt(NULL) in a few cases where the
		fs pointer was not available.  (Most notable, for block
		read/write errors.)

Mon Sep  4 21:41:03 1995  Remy Card  <card@bbj>

	* ehandler.c:
	  util.c: Include <sys/time.h> before <sys/resource.h>.  BSD needs it.

Mon Sep  4 10:14:49 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (show_stats): Show statistics about how many inodes
		have indirect, doubly indirect, and triply indirect
		blocks.  Allow up to 8 digits for statistics, instead of
		merely 6, so things look pretty for large filesystems.

	* pass1.c (pass1): Keep statistics about indirect, doubly
	        indirect, and triply indirect blocks.

	* pass1.c (unwind_pass1): Clear the above statistics when unwinding
		pass 1.

Fri Aug 18 15:17:10 1995  Theodore Y. Ts'o  <tytso@dcl>

	* util.c, ehandler.c: Move #include of <sys/resource.h> after
		#include of "e2fsck.h", since sys/resource.h may depend on
		sys/time.h, which is #included in e2fsck.h.

Thu Aug 17 22:33:37 1995    <tytso@rsts-11.mit.edu>

	* e2fsck.c (check_mount):  Use the new ext2fs_check_if_mounted()
		function to determine if the device is mounted.

	* e2fsck.c (main):  Add better error messages if ext2fs_open()
		fails. 

Wed Aug 16 16:25:02 1995    <tytso@rsts-11.mit.edu>

	* pass1.c (check_blocks): If we're clearing a directory, clear
		pb.is_dir so we don't do the following check of making
		sure the directory size matches; this is pointless, since
		we've already cleared the inode.

Fri Aug 11 09:08:54 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass1.c (bad_primary_block): New function, called by
		process_bad_block, which explains the facts of life to the
		user when a block in the primary superblock or primary
		group descriptors is bad.

	* pass2.c (check_dot): Handle the case where the first directory
		entry is used, but not ".".

	* pass2.c (check_dotdot): Handle the case where the second directory
		entry is used, but is not "..".

Thu Aug 10 10:05:10 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* e2fsck.c (check_super_block): Get the size of the physical
		device and if it is smaller than the reported size of the
		filesystem, report an error.

Sat Aug 12 03:39:18 1995  Remy Card  <card@bbj>

	* e2fsck.c (check_if_skip): Print the number of allocated files and
		blocks on clean filesystems.

Fri Aug 11 14:15:36 1995  Remy Card  <card@bbj>

	* e2fsck.8: Updated date and version number.

Thu Aug 10 14:26:01 1995  Remy Card  <card@bbj>

	* pass1.c (check_blocks): Check that directory size matches *exactly*
		the count of allocated blocks.

Wed Aug  9 21:21:24 1995  Theodore Y. Ts'o  <tytso@dcl>

	* pass1b.c (pass1d): Free the shared[] array when we're done with
		it to avoid a memory leak.

	* pass1.c (unwind_pass1): Use ext2fs_free_block_bitmap to free the
	        block_dup_map.

	* pass2.c (process_bad_inode): When clearing the inode, make sure
		the pathname is freed, to prevent a memory leak.

	* pass5.c (check_inode_bitmaps): Free free_array and dir_array
		when we're finished with them.
		(check_block_bitmaps): Free free_array when we're finished
		with them.

	* Makefile.in (e2fsck, flushb): Use $(LD) instead of $(CC) when
		linking the executable.

	* pass2.c (process_bad_inode): Even on OS's that don't support the
		fragment fields, make sure the Linux equivalent fields are
		set to zero.  If an OS wants to reuse these fields, which
		is probably a bad idea (although we may get desperate in
		the future) this code will have to be changed.

	* pass1.c (dir_block_cmp): If the block numbers are equal, compare
		on the inode field, and then blockcnt field.  This is just
		to keep the ordering of dir_blocks the same on all
		platforms when there are more than on missing directory
		blocks, which are indicated directories with holes, which
		are indicated with the block number being set to zero.

Sun Aug  6 15:40:58 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass1.c (check_blocks, process_block): check_blocks() modified
		to call the ext2fs_block_iterate() with BLOCK_FLAG_HOLE if
		the inode is a directory.  process_block() now checks to
		see if a directory has a "hole", or missing block.  If so,
		this fact is recorded in the directory block list so that
		the problem can be resolved in pass #2.

	* pass2.c (allocate_dir_block): Added allocate_dir_block() to
		allocate new blocks for directories with "holes".  Called
		out of check_dir_block if a block in the directory block
		list is zero.

	* pass3.c (get_lost_and_found): Move location of free(block) to
		prevent possible memory leak.

Sat Aug  5 12:42:22 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass2.c (check_dir_block): Use a automatic, fixed-saize array
		instead of alloca() --- alloca is not portable!  Check to
		make sure the filename is not longer than EXT2_NAME_LEN,
		and offer to fix it by truncating it, since it should
		never happen.

	* e2fsck.c (PRS): Use malloc() instead of alloca() --- alloca() is
		not portable!!  In any case putenv() in some systems must
		take a static character array or malloc()'ed memory;
		passing memory allocated using alloca() to putenv() is not
		advisable.

	* pass2.c (check_dot, check_dotdot): Use malloc() instead of
		alloca() --- alloca() is not portable!!!

Tue Jul 18 20:04:02 1995    <tytso@rsx-11.mit.edu>

	* pass1b.c (pass1c): 
	* pass3.c (check_root, get_lost_and_found): 
	* pass2.c (check_dir_block): Use ext2fs_{read,write}_dir_block
		to read/write the directory block.

Mon Jul 17 04:00:56 1995    <tytso@rsx-11.mit.edu>

	* util.c (ask_yn): Apply patch supplied by Peter A. Zaitcev to
		make sure VMIN and VTIME are set correct.

Fri Jul 14 19:26:29 1995    <tytso@rsx-11.mit.edu>

	* pass1.c (mark_block_used): Change to be an inline function.
		Assume that the block validity checks are already done,
		and use the fast variant of the bitmap functions.

Thu Jul 13 08:10:55 1995    <tytso@rsx-11.mit.edu>

	* pass5.c (check_block_bitmaps, check_inode_bitmaps): Check the
		bounds of the bitmaps in advance, and then use the fast
		variant of e2fs_test_{block,inode}_bitmap.

	* pass1.c (mark_block_used): Use ext2_fast_mark_block_bitmap since
		the bounds checking has already been done earlier.

Wed Jul 12 02:22:46 1995    <tytso@rsx-11.mit.edu>

	* pass1.c (pass1): Allocate and free the block_illegal_map, which
		is used for shortcut processing in process_block.
		(mark_table_blocks): Initialize block_illegal_map with the
		filesystem blocks.
		(describe_illegal_block): New helper function that
		describes why a block is illegal.
		(process_block): Use block_illegal_map as a shortcut
		to determine whether a block is bad.  Use
		describe_illegal_block to print out why the block is illegal.

Mon Jun 12 19:11:06 1995  Theodore Y. Ts'o  (tytso@dcl)

	* flushb.c: Don't include <linux/fs.h> if it doesn't exist.

	* scantest.c: Don't include <linux/fs.h>, <getopt.h>, or
		<mntent.h> if they don't exist.  (Mostly so that "make
		depend" works.)

	* pass1.c, pass1b.c, pass3.c, badblocks.c: Include <errno.h> (if
		it exists).

	* e2fsck.c, scantest.c: Don't include <getopt.h> if it doesn't
		exist. 

Mon Jun 12 08:37:49 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* pass2.c (process_bad_inode, check_for_zero_long,
	        check_for_zero_char):  Change long to u32, and char to u8.

Sun Jun 11 15:05:57 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* util.c (inode_has_valid_blocks): 
	* pass2.c (process_bad_inode): 
	* pass1.c (pass1, check_blocks, pass1_check_directory): Use
		LINUX_S_IS* instead of S_IS*.

	* e2fsck.h: Don't #include <sys/stat.h>

	* flushb.c (main): Add #ifdef BLKFLSBUF around ioctl.  (Although
		this program is pretty much useless if BLKFLSBUF isn't
		supported.)

	* e2fsck.c, badblocks.c: Add #include <errno.h>, since errno is
	        used.

Thu Jun  8 12:31:19 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* pass2.c (check_dot, check_dotdot, check_dir_block): Use alloca
	to allocate space for file names instead of using fixed size buffers.
	(process_bad_inode): Only check inode frag fields if
	HAVE_EXT2_FRAGS is defined (by configure).
	* pass1.c (pass1): Only check the inode frag fields if
	HAVE_EXT2_FRAGS is defined (by configure).

	* e2fsck.c (check_mount): Only check for a mounted filesystem if
	HAVE_MNTENT_H is defined (by configure).
	(PRS): Use alloca to allocate the new path string, instead of
	having a fixed size buffer (which was the wrong size anyway).
	(PRS): Only support the -F (flush) option if the BLKFLSBUF ioctl
	is defined.

	* e2fsck.h: Only include <linux/fs.h> if HAVE_LINUX_FS_H is
	defined (by configure).

	* Makefile.in: Rewritten to conform to GNU coding standards and
	support separate compilation directories.

Thu Apr  6 15:04:36 1995  Remy Card  <card@bbj.ibp.fr>

	* pass1.c (pass1): Test the mode in reserved inodes (must be zero).

Sat Mar 11 13:12:16 1995  Theodore Y. Ts'o  <tytso@localhost>

	* pass1.c (unwind_pass1): Clear the file type statistics counter
		when pass 1 needs to be restarted from scratch.

	* pass1.c (handle_fs_bad_blocks): Fix bug where bitmap blocks were
		being reallocated to blocks in the next block group,
		instead of the current block grup.

	* pass1.c (pass1, check_blocks): Set inode_link_info[ino] whenever
		inode.i_links_count is set.

Tue Feb 14 01:38:04 1995  Theodore Y. Ts'o  (tytso@rt-11)

	* pass1.c (process_block): Add checks for if the block is
		trepassing on a superblock or group descriptor table.

Sat Dec 31 00:52:11 1994    <tytso@rsx-11.mit.edu>

	* main.c (corrupt_msg): Extend the message which is printed out
		when the superblock is corrupt, to include the suggestion
		of using the -b option to specify an alternate superblock.

Thu Nov 24 09:29:58 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* badblocks.c (read_bad_blocks_file): If we are adding or
		replacing bad blocks in the bad blocks inode, sanity check
		the bad block inode first, and clear out any illegal blocks.

	* pass2.c (check_name): Don't bomb out if the attempt to get the
		pathname of the containing directory returns an error; the
		directory may be too badly damaged to expect that
		ext2fs_get_pathname will always succeed.  Use "???" if the
		pathname can't be obtained (it's only for a printf to the
		user anyway).

		The name of the containing directory and the bad filename
		were incorrectly interchanged in the user message.  Fixed.

	* pass2.c (check_name, check_dir_block): Use a common static
		string for the unknown pathname.

Mon Nov  7 22:30:54 1994  Remy Card  <card@bbj>

	* Fixed lots of printf formats to make sure that block and inode
	numbers are printed as unsigned integers.

Mon Oct 24 14:10:46 1994    (tytso@rsx-11)

	* pass5.c (check_block_end): Fix calculation of how the last block
		in the block bitmap should be calculated.

Wed Sep  7 10:01:13 1994    (tytso@rsx-11)

	* pass1b.c (pass1_dupblocks): Fix declaration of dup_inode_map to
		be an ext2fs_inode_bitmap, and free it properly.

	* e2fsck.h
	* e2fsck.c (main): Folded in Remy Card's changes to add a revision
	level to the superblock.

Wed Aug 17 22:00:20 1994  Remy Card  (card@bbj)

	* e2fsck.c (usage): Fixed bogus usage message.

Wed Aug 17 11:21:45 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* pass1.c (process_bad_block): Fixed bug so that blocks in the
	backup superblocks and group descriptors are handled gracefully.

