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.


