2003-07-25  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.34

2003-07-06  Theodore Ts'o  <tytso@mit.edu>

	* debugfs.c (do_imap): Fix gcc -Wall nitpicks (printf format types).

2003-05-21  Theodore Ts'o  <tytso@mit.edu>

	* unused.c (do_dump_unused): Add new command which dumps the
		unused blocks.  (Initial implementation; currently only
		dumps the output to stdout.)

2003-05-13  root  <tytso@mit.edu>

	* util.c (reset_getopt), debugfs.c (do_open_filesys,
	do_show_super_stats), ls.c (do_list_dir), dump.c (do_dump),
	htree.c (do_htree_dump, do_dx_hash), logdump.c (do_logdump):
	Define and use a new function, reset_getopt(), which does whatever
	is necessary to reset getopt() again.  This is different for
	different implementations, so the portabilty issues are a bit of a
	nightmare.  (Addresses Debian bug #192834)
	
2003-05-05  Theodore Ts'o  <tytso@mit.edu>

	* debugfs.c (do_imap), debugfs.h, debug_cmds.ct, debugfs.8.in:
		Added new command, imap, which prints the location of a
		specified inode in the inode table.

2003-04-21  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.33

2003-03-16  Theodore Ts'o  <tytso@mit.edu>

	* Makefile.in (DLOPEN_LIB): Link in the libdl library if it is
		present on the system.

	* debugfs.c (main): Call ss_get_readline() to attempt to pull in
		the readline library.

2003-03-06  Theodore Tso  <tytso@mit.edu>

	* debugfs.c (do_open_filesys, do_show_super_stats), 
	ls.c (do_list_dir), dump.c (do_dump), htree.c (do_htree_dump, 
	do_dx_hash), logdump.c (do_logdump): Reset optind to 1 for better
	compatibility with non-glibc implementations of getopt.

2003-03-01  Theodore Ts'o  <tytso@mit.edu>

	* Makefile.in, logdump.c (do_logdump): Use the blkid functions to
		find the external journal device.

2003-01-21  Theodore Ts'o  <tytso@mit.edu>

	* dump.c (do_dump): Open the output file with O_LARGEFILE so we
		can write files larger than 2GB.

2002-11-09  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.32

2002-11-08  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.31

2002-10-31  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.30

2002-10-31  Theodore Ts'o  <tytso@mit.edu>

	* debugfs.c (do_write): Check to see if the filename exists before
		creating it, and give an error if so.  Addresses
		Sourceforge bug #478195.

2002-10-30  Theodore Ts'o  <tytso@mit.edu>

	* Makefile.in (install): Search all compression extensions when
		deleting old man pages.

2002-10-13  Theodore Ts'o  <tytso@mit.edu>

	* debugfs.h, htree.c, setsuper.c: Fix gcc -Wall nits.

2002-10-02  Theodore Y. Ts'o  <tytso@mit.edu>

	* htree.c (htree_dump_leaf_node): Use ext2fs_read_dir_block2 so
		that the directory entries are appropriately byte-swapped.

2001-09-24  Theodore Tso  <tytso@mit.edu>

	* Release of E2fsprogs 1.29

2002-09-22  root  <tytso@mit.edu>

	* htree.c (htree_dump_int_node): Flag continuation hashes to make
		them easier to find.

2001-08-31  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.28

2002-08-23  Theodore Ts'o  <tytso@mit.edu>

	* setsuper.c: Add support for the fields s_uuid, s_journal_uuid,
		s_hash_seed, s_def_hash_version.  Add routines for parsing
		UUID's and hash algorithm identifiers.

2002-08-16  Theodore Ts'o  <tytso@mit.edu>

	* icheck.c (do_icheck): Check to see if the block is listed as
		part of the extended attribute block.

2002-07-21  Theodore Ts'o  <tytso@mit.edu>

	* htree.c (do_htree_dump): Fix a bug where we were not cleanly
		closing the pager after errors, which would leave the
		tty in noecho mode.

2002-07-18  Theodore Ts'o  <tytso@mit.edu>

	* htree.c (htree_dump_int_node): Add byte swapping code sot that
		the htree dump function works on a big-endian machine.

2002-07-15  Theodore Ts'o  <tytso@mit.edu>

	* debugfs.c (do_show_super_stats): Calculate and print the number
		of directories on a filesystem --- because we can and
		because it can be useful.

2002-07-09  Theodore Ts'o  <tytso@mit.edu>

	* debugfs.c (do_rmdir), debugfs.8.in: Implement the rmdir command.
		Addresses Debian bug #138003.

2002-06-26  Theodore Ts'o  <tytso@mit.edu>

	* htree.c (do_dx_hash): Use new ext2fs_dirhash function signature.
		Add getopt support so user can specify the hash version.

2002-05-11    <tytso@snap.thunk.org>

	* debug_cmds.ct, debugfs.c (do_bmap): Add new command "bmap" which
		calculates the logical->physical block mapping for an
		inode.

	* debugfs.c (do_init_filsys, main), util.c
		(common_block_args_process): Fix bad calling parameter
		order when calling parse_ulong.  This broke the -b  and -s
		options to debugfs, as well as do_init, and the testb,
		setb, clearb functions.

2002-04-01    <tytso@snap.thunk.org>

	* util.c (parse_ulong): Fix typo which cases parse_ulong to
		coredump if the err variable is filled in (for example, if
		the -b or -s options are passed to the debugfs's
		command-line invocation).

2002-03-11  Theodore Tso  <tytso@mit.edu>

	* ls.c (list_dir_proc): Fix bug: ls -l fails to print the file
		type correctly if running on big-endian systems.

	* htree.c (htree_dump_leaf_node): Use the ext2_dirhash function
		instead of a local static function.

2002-03-08  Theodore Tso  <tytso@mit.edu>

	* Release of E2fsprogs 1.27

2002-03-07    <tytso@snap.thunk.org>

	* ls.c (list_dir_proc): Fix typo in debugfs which was causing a
		compiler warning.

2002-03-05  Theodore Tso  <tytso@mit.edu>

	* lsdel.c (do_lsdel): lsdel uses the pager to print out the list
		of potentially deleted inode.  Thanks to Jaroslav Drzik
		<jdrzik@host.sk> for suggesting this enhancement.

	* debugfs.c (do_modify_inode): Fix bug which caused modify_inode
		to core dump if a fliesystem isn't open.  Thanks to 
		Jaroslav Drzik <jdrzik@host.sk> for finding and reporting
		the bug and his proposed fix.

2002-02-26  Theodore Tso  <tytso@mit.edu>

	* ls.c (list_dir_proc): When listing the directory entry in long 
		format, include the file type of the directory entry in 
		parenthesis.

2002-02-25  Theodore Tso  <tytso@mit.edu>

	* util.c (open_pager): If the PAGER environment is set to __none__
		then don't use a pager at all, and ship it all to stdout.

	* Makefile.in, debug_cmds.ct, htree.c: Add new file htree.c, which
		implements the three new commands, htree_dump, dx_hash,
		and dirsearch.

2002-02-24  Theodore Tso  <tytso@mit.edu>

	* Makefile.in (install): Remove any compressed man pages before
		installing the man pages.

2002-02-03  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.26

2002-01-03  Theodore Tso  <tytso@mit.edu>

	* lsdel.c (do_lsdel): New optional argument which allows the user
		to only see the most recently deleted files.

	* debugfs.c (do_undel, do_testb, do_freeb, do_setb, do_ffb): Add
		new command, undelete, which automates undeleting a
		deleted inode and linking it back to a directory.  Add a
		count argument to the testb, freeb, setb, and ffb commands.

	* ls.c (list_dir_proc, do_list_dir): Add support for -d option
		which lists deleted directory entries.

	* debug_cmds.ct: Add new command, undelete.

	* dump.c, icheck.c, logdump.c, ls.c, lsdel.c, setsuper.c,
		debugfs.c: Use new utility functions which factor out
		commonly used code.

	* util.c (debugfs_read_inode, debugfs_write_inode,
		common_block_args_process, common_inode_args_process,
		common_args_process, strtoblk, parse_ulong): New
		functions which factor out commonly used code into
		subroutines for ease of maintenance and to make the
		executable size smaller.

2001-12-23  Theodore Tso  <tytso@mit.edu>

	* Makefile.in, jfs_user.h: Move linux/jbd.h to
		ext2fs/kernel-jbd.h, to avoid using the system header
		file version of hbd.h when using diet glibc (since it
		forcibly adds /usr/include to the beginning of the
		include search path.)

2001-12-22  Theodore Tso  <tytso@mit.edu>

	* debugfs.c (kill_file_by_inode, release_blocks_proc): Update the
		group descriptor free block and inode counts when deleting
		or killing a file.

2001-12-16  Theodore Tso  <tytso@mit.edu>

	* setsuper.c (print_possible_fields), 
		logdump.c (dump_journal): Fix gcc -Wall nits

	* Makefile.in, jfs_user.h: linux/jfs.h has been renamed to
		linux/jbd.h

2001-12-02  Theodore Tso  <tytso@mit.edu>

	* util.c (close_pager): Use pclose() instead of fclose() when
		closing the pager stream.

2001-11-30  Theodore Tso  <tytso@mit.edu>

	* debugfs.c (finish_range, dump_blocks): Fixed bug in Andreas's >
		2GB support changes: you need to use %lld when printf'ing
		an long long variable.

2001-11-24  Theodore Tso  <tytso@mit.edu>

	* debugfs.8.in: Update manual page to document the set_super_value
		and logdump commands, and move the "specifying files"
		section closer to the beginning of the man page so people
		won't miss it.

	* setsuper.c (print_possible_fields): "set_super_value -l" now
		prints out the list of valid superblock fields which the
		ssv command can set.

2001-09-20  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.25

2001-09-02  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24a

2001-08-30  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24

2001-08-27  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (main): Remove EXT2FS_VERSION from the version
		display, since it only confuses people.

2001-08-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.23

2001-08-12  Theodore Tso  <tytso@valinux.com>

	* logdump.c (do_logdump, dump_journal): Add support for dumping
		external journals.

2001-06-23  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.22

2001-06-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.21

2001-06-13  Theodore Tso  <tytso@valinux.com>

	* setsuper.c: Add s_lastcheck field to the fields which can be
		modified using set_super_value.  (Suggested by Andreas
		Dilger)

2001-06-03  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (copy_file): Fixed signed vs unsigned bug which causes
		read errors to not be noticed.

2001-06-01  Theodore Tso  <tytso@valinux.com>

	* Makefile.in: Move include/asm/types.h.in to 
		lib/ext2fs/ext2_types.h.in.

	* debugfs.c, debugfs.h, logdump.c: Fix various gcc -Wall nitpicks.

	* logdump.c (read_journal_block): Replace pread with lseek/read
		combination.

2001-05-25  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.20

2001-05-14  Theodore Tso  <tytso@valinux.com>

	* debugfs.h: Change location of ext2_fs.h to be ext2fs/ext2_fs.h

2001-05-12  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (print_features): Use fputs instead of printf to
		output using the passed-in FILE *.

2001-05-09  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (do_write, do_mknod): Set the file type information
		when creating the inode.

2001-05-03  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (do_open_filesys, main): Add -i option which will
		allow debugfs to examine ext2 image files.

2001-03-29  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (dump_blocks, dump_inode, internal_dump_inode): Add
		internal_dump_inode() interface for the logdump command.

	* logdump.c: Imported code from Stephen Tweedie to dump the ext3
		journal.

2001-03-18  Theodore Tso  <tytso@valinux.com>

	* debugfs.c (do_write, do_mknod): Remove extra (useless) call to
		ext2fs_write_inode.

2001-01-12  Theodore Ts'o  <tytso@valinux.com>

	* setsuper.c: Cleaned up some random whitespace problems.

	* debugfs.h,  debugfs.c  (do_show_super_stats): Use  full words
		instead of pluralism hack  to make I18N conversion easier.
		Clean up gcc -Wall complaints.

2001-01-11    <tytso@snap.thunk.org>

	* debugfs.c, debugfs.h, dump.c, icheck.c, ls.c, lsdel.c, ncheck.c,
		setsuper.c, util.c: Change ino_t to ext2_ino_t.  Fix a few
		minor gcc-wall complaints while we're at it.

2001-01-01    <tytso@snap.thunk.org>

	* debugfs.c Replace use of struct ext2fs_sb with struct
		ext2_super_block.

2000-12-30    <tytso@snap.thunk.org>

	* dump.c (fix_perms): Fix bug for systems which don't have fchown;
		was incorrectly using chmod instead of chown.

	* setsuper.c (find_field): Strip the s_prefix if given for ssv
		fields.  Remove hard-coded s_ from inode_size
		field.  (Suggested by Andreas Dilger)

	* debugfs.c (do_modify_inode): Add the ability to set the inode
		generation number.  (Suggested by Andreas Dilger)

2000-08-23    <tytso@valinux.com>

	* util.c (string_to_inode): Use strtoul instead of atoi, so that
		hex inode numbers will be accepted.

2000-08-19    <tytso@valinux.com>

	* util.c (open_pager): Set SIGPIPE to be ignored, so that quitting
		out of the pager doesn't blow away debugfs.

2000-08-14    <tytso@valinux.com>

	* debugfs.c (do_show_super_stats): Use list_super2() instead of
		using explicit printf statements.  (We get a more complete
		printout this way.)

	* util.c (open_pager): If the PAGER environment variable is not
		set, default to using "more".

	* setsuper.c: New function which implements the set_super_value
		command.  Allows the user to set arbitrary superblock
		fields.

	* debugfs.c (dump_inode): Cap the length when printing a fast
		symbolic link to inode.i_size.
		(list_blocks_proc): Print block ranges (4510-4533) to make
		the stat output easier to read.

2000-06-27  Andreas Dilger <adilger@turbolabs.com>

	* debugfs.c (list_blocks_proc): show relative inode block numbers
		and/or indirect block status

2000-07-13    <tytso@valinux.com>

	* Release of E2fsprogs 1.19

2000-07-05  Theodore Ts'o  <tytso@valinux.com>

	* debugfs.c (dump_inode): Make the generation field be printed as
		an unsigned integer.

2000-07-04    <tytso@snap.thunk.org>

	* Makefile.in: Use _SS_DIR_OVERRIDE to make sure we get the
		mk_cmds support files from the source tree.

2000-06-09    <tytso@snap.thunk.org>

	* lsdel.c (do_lsdel): Handle bad bad blocks in inode table.

2000-05-27  Theodore Ts'o  <tytso@valinux.com>

	* debugfs.c (do_testb, do_testi): Call check_fs_bitmaps to avoid
		coredumping if the bitmaps aren't loaded.

	* util.c (check_fs_bitmaps): New function which checks whether or
		not the bitmaps are loaded.

2000-05-23  Aaron Crane  <aaronc@pobox.com>

	* debugfs.8.in: Documented new behaviour.

	* ls.c (ls_l_file): Fix Y2K bug -- was printing 22-May-100 for
	 	recent files.  Switched to 4-digit years.

	* dump.c, debug_cmds.ct (do_rdump): Add new debugfs command
	 	"rdump", which recursively dumps a directory and its
		contents.
		(fix_perms): New function.  Break permission-fixing
		code out of dump_file() so it can be called by rdump
		code as well.
		(dump_file): Call fix_perms().

	* debugfs.c, debug_cmds.ct (do_lcd): Add new debugfs command
	 	"lcd", which changes the cwd on the native filesystem.

	* debugfs.c (open_filesystem): Extra args for superblock,
		blocksize, and catastrophic mode.  Changed callers.
		(do_open_filesys, main): Accept new -b, -s, -c options
		for open_filesystem.

2000-02-02  Theodore Ts'o  <tytso@valinux.com>

	* debugfs.c (dump_inode): Remove #ifdef for i_version
		vs. i_generation since we know it will always be
		i_generation now.

2000-01-18  Theodore Ts'o  <tytso@valinux.com>

	* debugfs.c (main): Use return instead of exit at the end of main
		to avoid some compiler warnings.

	* Makefile.in: Since LIBUUID can sometimes include
		"-lsocket" we need a separate DEPLIBUUID that can be used
		in Makefile's dependency rules.

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

	* Makefile.in (distclean): Remove TAGS and Makefile.in.old from
		the source directory.

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

	* Release of E2fsprogs 1.18

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

	* icheck.c (do_icheck): 
	* ncheck.c (do_ncheck): If ext2fs_open_inode_scan() returns 
		EXT2_ET_BAD_BLOCK_IN_INODE_TABLE loop to skip over the bad
		blocks in the inode table.

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

	* Release of E2fsprogs 1.17

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

	* debugfs.h: Add declaration for do_features()

	* debugfs.c: Add #incldue of e2p.h to fix gcc warnings.

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

	* debugfs.c (do_dirty_filesys): Make the "dirty" command clear the
		valid bit on the superblock.  (And with a -clean option to
		set the valid bit.)  Originally it was used just to set
		the "needs to be written" bit in the in-core version of
		the fs structure.

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

	* Release of E2fsprogs 1.16

1999-09-07    <tytso@rsts-11.mit.edu>

	* debugfs.c, debug_cmds.ct: Add new debugfs command "feature"
		which allows the user to set or clear filesystme features.
		Add the -f (force) option to the open command.  Add the 
		-h (superblock header only) option to the stats command.

1999-07-30    <tytso@rsts-11.mit.edu>

	* debugfs.c (dump_inode): Fix debugfs message so it is the same
		for when compiled under either Linux 2.2 or 2.3.  This
		allows for the f_swapfs regression test suite to work
		regardless of which OS e2fsprogs was compiled on.

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

	* Release of E2fsprogs 1.15

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

	* debugfs.c (dump_inode): Add compatibility for Linux 2.3 kernels
		that use i_generation instead of i_version.  Patch
		supplied by Jon Bright <sircus@sircus.demon.co.uk>.

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

	* icheck.c (do_icheck): Check to make sure the inode has valid
		blocks before iterating over that inode's blocks.

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

	* Release of E2fsprogs 1.14

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-07-31  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (do_stat, do_clri): Fix bug where debugfs wasn't
		displaying the error message if ext2fs_read_inode() failed.
		(do_rm): Fix similar problem for call to ext2fs_namei().
	
1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.12

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

	* debugfs.c: Add a -V option which displays the current version.

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

	* Makefile.in: Change to use new installation directory variables
		convention.  Fix installdirs and uninstall rules to reflect
		the fact that debugfs has been installed in the root
		filesystem.  Fix uninstall rules to take $(DESTDIR) into
		account.

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

	* debugfs.h: Add declaration for do_dirty_filsys() to prevent
		-Wall warnings.

	* debugfs.c (copy_file): 
	* dump.c (dump_file): Fix -Wall warning caused by
		signed/unsigned mismatch. 

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

	* debugfs.c, ls.c, lsdel.c: Add support for large files.  (The
		high 32 bits share space with the i_dir_acl field.)

Sun Mar  8 22:53:04 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ls.c (list_dir_proc): Mask off high 8 bits from
 		dirent->name_len.

Mon Dec  1 13:21:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in: Install debugfs in /sbin, instead of /usr/sbin.

Sat Oct 25 18:35:30 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (copy_file), dump.c (dump_file): Change to use the new
		fileio primitives in libext2.

Fri Oct 24 23:47:43 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

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

Tue Oct 14 21:50:24 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (main): When printing a usage message, have main
		return 1 (instead of not specifying a return value, bad!)

Mon Sep 15 22:03:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (main): Fix declaration of main so that it returns an int.

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

	* Release of E2fsprogs 1.11

Thu May  8 23:05:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

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

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

	* Release of E2fsprogs version 1.10

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 14:36:05 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ls.c: New file which implements the ls command.  Added the -l
		option. 

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

	* Release of E2fsprogs version 1.07

Wed Jan  1 23:53:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* lsdel.c (do_lsdel): Use time_to_string() instead of ctime().

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

	* Release of E2fsprogs version 1.06

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

	* Release of E2fsprogs version 1.05

Mon Sep  9 23:05:11 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (unlink_file_by_name): If unlinking a file with a
		directory path, correctly replace the slash with a NULL.
		(do_show_debugfs_params): Don't try to print the open mode
		if there's no filesystem opened (since that will cause a
		core dump).
		(main): Fix usage string; the -w and device elements are
		independently optional.

Tu Sep  3 15:09:39 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (main): Added -f option to debugfs, which takes a
		command file of debugfs commands and executes them.

Sat Aug 31 01:18:43 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.8.in: Heavily edited and improved manual page.

	* dump.c (dump_file): Improve the write function for writing out
		the file, so that it is limited to the actual size of the
		file, instead of outputing the nulls following the EOF.
		Make sure dump_file does the right thing for files with holes.
		(do_dump): Add support for the -p option to the dump
		command, which attempts to preserve the owner and
		permissions field.

Fri Aug 30 14:56:59 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (main): Add -R option to debugfs, which allows it to
		take a single debugfs command on the command line.

Fri Aug  9 09:03:31 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (do_open_filesys): Set optind to 0 to reset getopt(),
 		to be complete correct.
		(do_show_super_stats): Print OS type, volume label, last
 		mounted directory, and UUID.
		(dump_inode): Print the fragment information in a
 		filesystem independent way.
		(do_modify_inode): Modify the fragement information in a
 		filesystem independent way.

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

	* Release of E2fsprogs version 1.04

Wed May 3 20:41:26 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* debugfs.c (dump_inode): Correctly print the translator on the	hurd.
	       (do_modify_inode): Modify the translator block on the hurd.

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

	* Release of E2fsprogs version 1.03

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

	* Release of E2fsprogs version 1.02

Fri Dec  1 22:42:31 1995    <tytso@rsts-11.mit.edu>

	* Makefile.in (LIBS): Rearrange the order of the libraries to be
		linked, so that -lext2fs is before -lcom_err.

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

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

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

	* debugfs.c (do_find_free_block): Fix typo in code which checked
		to see if the usage message should be printed.

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

	* debugfs.c (do_open_filesys): Change to always set optreset to 1,
		to make BSD getopt()'s happy.  Also set optind to 1, which
		should make more getopt()'s happy.

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

	* debugfs.c (do_find_free_block, do_find_free_inode): Fix bug in
		the usage handling where "ffi ?" or "ffb ?" would
		dereference a NULL pointer.

Fri Aug 11 14:21:07 1995  Remy Card  <card@bbj>

	* debugfs.8: Updated date and version number.

Thu Aug 10 14:28:50 1995  Remy Card  <card@bbj>

	* debugfs.8: Fixed a spelling error in Ted's name :-)

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

	* debugfs.c, ncheck.c, icheck.c, lsdel.c, dump.c: Include
		<errno.h> (if it exists)

	* debugfs.c, dump.c, icheck.c, lsdel.c, ncheck.c: Don't include
		<getopt.h> if it doesn't exist.

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

	* ncheck.c (do_ncheck): Use LINUX_S_ISDIR instead of S_ISDIR

	* debugfs.c: Implement the mknod and write commands (from Linus).

		Change names of modify_char, modify_short, and modify_long
		to be modify_u8, modify_u16, and modify_u32, respectively.

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

	* debugfs.c (dump_inode): Only print out inode frag fields if
	HAVE_EXT2_FRAGS is defined (by configure).  Don't print out the
	reserved field at all for  now.

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

Thu Nov 24 17:46:23 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* dump.c: Added two new commands, "dump" and "cat", which allow
		the user to dump the contents of an inode to a file or to
		stdout, respectively.


