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.

