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

	* Release of E2fsprogs 1.34

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

	* Release of E2fsprogs 1.33

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

	* fs_ext2.c (fs_setup): During FSIM setup, when the FSIM cannot be
		loaded due to incompatible tool versions, just print a
		message to the log instead of displaying a message to the
		user.  (EVMS 2.0, rev 1.3, change to commented out code only)
		(ext2_plugrec): fix long plug-in name to indicate support
		for ext3 (EVMS 2.0, rev 1.4)
		(fs_expand, fs_shrink): Don't save the return value from
		waitpid().  Especially don't save it back to the same
		variable that will be used to call waitpid() again.
		(EVMS 2.0, rev 1.12)
		(fs_mkfs, fs_init_task, fs_set_option): Make sure most
		functions have entry/exit log macros.  (EVMS 2.0 rev 1.14)
		(fs_expand, fs_shrink): Check for errors from
		fsim_get_ext2_superblock().  (EVMS 2.0 rev 1.15)
	
	* fsimext2.c (set_mkfs_options):  Fix compile warnings.
		gcc 3.2.1 doesn't like empty "default:" cases at the end
		of "switch" statements (EVMS 2.0 rev 1.2)
		(fsim_get_volume_limits): Remove unused varable (EVMS 2.0
		rev 1.4)
		(ext2fs_swap_super): Remove unnecessary "return" (EVMS 2.0
		rev 1.7)
		Make sure most functions have entry/exit log macros (EVMS
		2.0 rev 1.8, 1.9)
		(fsim_fsck, fsim_mkfs): Don't save the return value from
		waitpid().  Especially don't save it back to the same
		variable that will be used to call waitpid() again.  (EVMS
		2.0 rev 1.5/partial).
		(fsim_fsck): In fsim_fsck(), set the read pipe to
		non-blocking before going into the loop waiting for data.
		If there are no more data left, the function hangs waiting
		for the read() to complete.  (EVMS 2.0 rev 1.5/partial)
		(fsim_fsck): Fix file descriptor leak.

	* fsimext2.h (LOGEXITRC): Synchronize text for exit macro with
		EVMS 2.0 (rev 1.2).

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

	* fs_ext2.c (fs_expand, fs_shrink), 
	  fsimext2.c (fsim_mkfs, fsim_fsck): Inform the user if e2fsck, 
		mke2fs or resize2fs dies with a signal, or if the exit 
		with a non-zero exit status.

	* fsimext2.c (set_mkfs_options): If the hard sector size is 1024,
		don't force a blocksize of 1024; there's no need to do so.

	* fs_ext2.c (fs_setup): Synchronize with EVMS CVS rev 1.14 
		(2002/10/17): Changed function to correspond with EVMS ABI
		1.2

	* Makefile.in, common.h, enginestructs.h, fs_ext2.c, fsimext2.h,
		options.h, plugfuncs.h: Change #define from ABI_EVMS_1_0
		to EVMS_ABI_CODE which may be 100, 110, or 120,
		corresponding to EVMS releases 1.0.0, 1.1.0, and 1.2.0.
		Update header files to support EVMS ABI 1.2.
	
	* fsimext2.c (set_mkfs_options): Synchronize with EVMS CVS rev
		1.7 (2002/09/11): Add a hack to force mkfs won't a 
		blocksize equal to the hardsector size if it is larger
		than 512 bytes.

	* fs_ext2.c (fs_expand, fs_shrink): Synchronize with EVMS CVS rev
		1.13 (2002/09/03).  Add better error handling for child
		processes that die unexpectedly.
	
	* fsimext2.c (fsim_mkfs, fsim_fsck): Synchronize with EVMS CVS rev
		1.6 (2002/09/03).  Add better error handling for child
		processes that die unexpectedly.

	* fs_ext2.c (fs_expand): Synchronize with EVMS CVS rev 1.12
		(2002/08/28): Use the EVMS_IS_MOUNTED macro.

	* fs_ext2.c (fs_expand, fs_shrink): Synchronize with EVMS CVS rev
		1.11 (2002/8/27).  Read from the resize2fs output in 
		non-blocking mode, so the GUI continues to updates the window.

	* fsimext2.h: Synchronize with EVMS CVS rev 1.8 (2002/8/29).
		Change all __uXX's to u_intXX_t's.

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

	* Release of E2fsprogs 1.30

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

	* Release of E2fsprogs 1.29

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

	* Release of E2fsprogs 1.28

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

	* Makefile.in: Revamp makefile so that it doesn't depend
		--enable-elf-shlibs.  We always build the shared library,
		since it's meant to be used as a plugin library.

	* fs_ext2.c (fs_fsck, fs_shrink, fs_expand): Change to use new
		calling convention of fsim_fsck.  Fixed bug in fs_shrink
		and f_expand where the shrink or expand would get aborted
		if fsck returned an exit status code of 1 (which is normal).

	* fsimext2.c (fsim_fsck): Add new parameter ret_status, and return
		the exit status there.  The return code now returns 0 for
		success, and an error code in case of failure, which
		removes a lot of the ambiguity.

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

	* fs_ext2.c, fsimext2.c: Synchronize with EVMS CVS tree.
		Fixed up confusion caused by bad parameter names for
		get_fs_limits().  Added missing conversion of
		volume->vol_size from sectors to bytes.  Fix up error 
		returns for unsupported tasks as EINVAL, not ENOSYS.
		Use logical names for the API version numbers, since 
		the ABI is much more dependent on the headers.  Add
		code to byte-swap the superblock if necessary.
		Fix up logging macros to use __FUNCTION__ correctly.

	* common.h, dlist.h, enginestructs.h, options.h, plugfuncs.c, 
		fs_ext2.c: Synchronize with ABI of EVMS 1.1.

2002-06-01    <tytso@thunk.org>

	* fs_ext2.c (fs_init_task): Fix minor bugs pointed out by Steve
		Pratt.  Fixed a selection bug and added checks to make
		sure volumes are not mounted when creating the list of
		volumes which can be mkfs'ed by the ext2/3 plugin.

2002-05-28    <tytso@thunk.org>

	* fsimext2.c: Log the fsck and mke2fs command lines.  Return
		appropriate volume limits so that resizing will work
		correctly.  Fix bug in how the e2fsck output was presented
		to the user.

	* fs_ext2.c: Add support for expanding and shrinking ext2/3
		filesystems.



