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

	* Release of E2fsprogs 1.20

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

	* e2p.h: #include <> instead of "" for ext2fs and et header files,
		since they will be installed in /usr/include

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

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

2001-05-11  Andreas Dilger  <adilger@turbolinux.com>

	* feature.c: Add COMPAT_DIR_INDEX and RESIZE_INODE known features

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

	* ls.c (print_features): Added missing space when printing (none)
		as the filesystem feature.
		(list_super2): If the filesystem revision is unknown, say so.

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

	* ls.c (list_super2): Fix bug where we were printing the
		filesystem UUID instead of journal UUID when trying to
		display the journal UUID.

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

	* feature.c: Remove backward compatibility #ifdef's for old
		ext2_fs.h header files.

	* feature.c: Add definition for EXT3_FEATURE_INCOMPAT_JOURNAL_DEV

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

	* pf.c: Clarified name of the Compression_Raw_Access flag, and
		capitalized Journaled_Data.

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

	* ls.c: Remove our own internal definition of struct ext2fs_sb.
		We can assume that ext2_super_block is always up to date.

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

	* pf.c: Add code to print out the journalled data flag.

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

	* fgetflags.c (fgetflags):
	* fgetversion.c (fgetversion):
	* fsetflags.c (fsetflags):
	* fsetversion.c (fsetversion): Use the LFS API if available so
		that the files are opened with O_LARGEFILE.  Addresses
		Debian bug #72690.

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

	* ls.c (list_super): Use better description of s_last_orphan

	* ls.c (list_super, list_super2): Added new API function which
		takes a FILE * so that the output can be redirected to a
		stream. 

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

	* Release of E2fsprogs 1.19

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

	* ls.c (list_super): Display the journal information fields in the
		superblock if the filesystem has a journal.

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

	* Makefile.in: Remove explicit link of -lc in the shared library.
		(It shouldn't be necessary, and is harmful in some cases).

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

	* ls.c (list_super): Change the string displayed for the Hurd to
		be GNU/Hurd, instead of just "GNU".

Thu Apr  6 17:38:00 2000  Theodore Y. Ts'o  <tytso@signal.thunk.org>

	* feature.c: Make feature_list static; it shouldn't be exported.

	* dll/jump.funcs: Update a.out shared library control file.

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

	* pf.c (print_flags): Rename EXT2_NOCOMP_FL to 	EXT2_NOCOMPR_FL.

	* Makefile.in: Add "set -e" so that any errors in installing
		header files causes an immediate exit.

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

	* Makefile.in: Install the e2p.h header.
	
	* e2p.h, pf.c (print_flags): Change the third parameter of
		print_flags() to be an option parameter, although we only
		support one option at this point.

	* pf.c (print_flags): Updated to use a more generic structure for
		storing the ext2 inode flags.  Add support for the
		(current) set of compression flags.  
	
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-10-26    <tytso@valinux.com>

	* Release of E2fsprogs 1.17

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

	* feature.c: Fix GCC warnings; add const to the char * types in
		the function prototypes for e2p_feature2string and
		e2p_edit_feature.

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

	* Release of E2fsprogs 1.16

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

	* feature.c (e2p_edit_feature), e2p.h: Add a new argument which
		allows the calling application to limit what features the
		user is allowed to set or clear using this function.
		Also add support for comma separated lists.

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

	* Makefile.in, feature.c, e2p.h: New file which is used for
		displaying and editing superblock feature sets.

	* ls.c (print_features, list_super): Add new function
		print_features which is used to display the feature
		bits in the superblock.

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

	* Release of E2fsprogs 1.15

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

	* Release of E2fsprogs 1.14

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

	* uuid.c: Use asm/types.h instead of linux/types.h, to be
		consistent with other locations where we've had to do this
		to work around glibc.

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

	* Release of E2fsprogs 1.13

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

	* Makefile.in: Updated dependencies.

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

	* Release of E2fsprogs 1.12

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.

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

	* getversion.c (getversion): Return 0 if there's no error.

	* fgetversion.c (fgetversion): Pass the address of the temporary
		variable instead of the unitialized variable to the
		EXT2_IOC_GETVERSION ioctl.

Mon Mar  9 08:05:30 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* fgetflags.c, fgetversion.c, fsetflags.c, fsetversion.c,
		getflags.c, getversion.c, setflags.c, setversion.c:
		The ext2 version and flags ioctl's take an int *, not a
		long *.  Fix library to use the correct type, so we don't
		have problems on the Alpha.

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

	* Release of E2fsprogs 1.11

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

	* Release of E2fsprogs version 1.10

Wed Apr 23 22:41:55 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* ls.c (list_super): Add #ifdef's so it will compile under 1.2.13

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

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

	* ls.c (list_super): Display the filesystem revision and any
		features that might be implemented.

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

	* Release of E2fsprogs version 1.07

Thu Jan  2 00:06:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* uuid.c: Include string.h, since we use memcpy().

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

	* ls.c (list_super): Copy times from the superblock to a time_t
 		variable.  (The alpha has different sizes for time_t and
 		the time in the superblock.)

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

	* Release of E2fsprogs version 1.06

Sun Sep 22 16:20:12 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* pf.c: Add support for the 'A' (no atime) flag.

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

	* Release of E2fsprogs version 1.05

Sat Sep  7 14:48:35 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ls.c (interval_string): Pretty print the check interval.

Tue Aug  6 14:12:36 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ls.c (list_super): Display the OS, volume label, last mounted,
 		and UUID field if present.

Mon Jun 24 09:55:58 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ps.c, pf.c, pe.c, ls.c, setversion.c, setflags.c, getversion.c, 
		fsetversion.c, fsetflags.c, fgetversion.c, fgetflags.c,
		getflags.c: Remove include of ext2_fs.h, since it's
		included by e2p.h; this also solves a sys/types.h vs
		linux/types.h inclusion ordering problem with the GNU libc.

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

	* Release of E2fsprogs version 1.04

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

Tue Jan  2 20:50:44 1996    <tytso@rsts-11.mit.edu>

	* fgetflags.c (fgetflags): 
	* fsetflags.c (fsetflags):
	* fgetversion.c (fgetversion):
	* fsetversion.c (fsetversion): Add the O_NONBLOCK flag to open
		call, so that we don't hang trying to open things like
		named pipes.

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

	* ls.c (list_super): Use the correct field (s_def_resgid) when
		printing the reserved group gid.

Fri Oct 27 18:07:48 1995    <tytso@rsts-11.mit.edu>

	* iod.c (iterate_on_dir): Don't assume that d->reclen is the size
		of the dirent structure; it isn't under Linux.

Mon Sep  4 21:43:53 1995  Remy Card  <card@bbj>

	* Makefile.in: Added support for BSD shared libraries.

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

	* setflags.c: #include <sys/types.h> before including <sys/stat.h>

Sat Aug 12 03:11:45 1995  Remy Card  <card@bbj>

	* Makefile.in (install): Install static libraries in $(ulibdir)
		(/usr/lib on Linux) instead of $(libdir) (/lib on Linux).

Sat Aug  5 11:43:36 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* Makefile.in (DLL_INSTALL_DIR, ELF_INSTALL_DIR): Set the
		installation directories correctly.

Thu Jun 15 23:41:20 1995  Remy Card  <card@bbj>

	* Makefile.in: Added support for ELF shared libraries.

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

	* e2p.h: Move <direct.h> after <stdio.h>

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

	* iod.c (iterate_on_dir): If struct dirent has a d_namlen field,
	assume that actual dirent entries may be larger than the structure
	(by the name field), and take extra care deal with this case.
	This code assumes that d_reclen is a valid dirent field.
	Also, don't include <dirent.h>, as e2p.h already does.

	* fgetversion.c (fgetversion): Only use the ext2 ioctl if it
	doesn't cause a compile-time barf, otherwise just return EOPNOTSUPP.
	* getversion.c (getversion): Ditto.
	* fsetversion.c (fsetversion): Ditto.
	* setversion.c (setversion): Ditto.
	* fsetflags.c (fsetflags): Use chflags instead of the ext2 ioctl
	if possible, and otherwise only use the ioctl if it doesn't barf.
	* setflags.c (setflags): Ditto (with fchflags).
	* fgetflags.c (fgetflags): Use the stat st_flags field instead of
	the ext2 ioctl if possible, and otherwise only use the ioctl if it
	doesn't barf.
	* getflags.c (getflags): Ditto.

	* e2p.h: Include <sys/types.h>, as some <dirent.h>s need it.
	* ls.c: Move the include of <sys/types.h> to where <grp.h> can see it.

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

Mon Nov  7 21:59:12 1994  Remy Card  <card@bbj>

	* ls.c (list_super): List the new fields s_def_resuid and
	s_def_resgid.

	(print_user): New function which prints the uid and the user name.

	(print_group): New function which prints the gid and the group name.

Wed Aug 17 21:50:39 1994  Remy Card  (card@bbj)

	* pf.c (print_flags): New attributes are recognized and a long
	format can be used.


