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.


