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

	* Release of E2fsprogs 1.19

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

	* ext2fs.h (EXT2_LIB_FEATURE_INCOMPAT_SUPP): Add
		EXT3_FEATURE_INCOMPAT_RECOVER (aka needs_recovery) to the
		list of filesystem flags supported by the library.

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

	* ext2fs.h: Update to include latest journalling additions to the
		superblock.

	* dll/jump.funcs: Add new jumptable entries for
		ext2fs_write_bb_FILE, ext2fs_read_bb_FILE2, and
		ext2fs_badblocks_equal.

	* tst_badblocks.c: Update test program to test
		ext2fs_read_bb_FILE2 and ext2fs_write_FILE.

	* write_bb_file.c (ext2fs_write_bb_FILE): New function which
		writes out bad blocks list to a file.

	* read_bb_file.c (ext2fs_read_bb_FILE2): Add new function which
		changes the callback function to take two additional
		arguments; a private blind pointer supplied by the caller,
		and pointer to a char * containing a pointer to the
		invalid string.

	* badblocks.c (ext2fs_badblocks_equal): Add new function which
		returns true if two badblocks list are equal.

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

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

	* getsize.c (main): Add debugging code under #ifdef DEBUG

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

	* mkdir.c (ext2fs_mkdir): Read the parent directory's inode
		earlier, so that if there's an error reading it, we can
		more cleanly back out of the operation.

2000-05-25    <tytso@snap.thunk.org>

	* getsize.c (ext2fs_get_device_size): Use open64() instead of
		open() if it exists.  Under linux, manually define the
		ioctl for BLKGETSIZE if it isn't already defined and it's
		safe to do so.

	* unix_io.c (unix_open): Use open64() instead of open() if it
		exists. 

	* llseek.c: Simplify header includes of unistd.h.  If lseek64 is
		available (and prototypes are defined) use it in
		preference to llseek.

	* Makefile: Add hack dependency rule so that parallel makes work
		correctly. 

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

	* ext2fs.h: Add appropriate ifdef's to support C++ compilation.

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

	* block.c: Readibility tweak in conditionals involving
		ctx->fs->flags.

	* ext2fs.h: Use AUTOCONF SIZEOF_* macros if available to determine
		how to define __s64 and __u64.  Turn off "compression is
		experimental" warning if the cpp macro
		I_KNOW_THAT_COMPRESSION_IS_EXPERIMENTAL is defined.

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

	* ext2fs.h: Define EXT2FS_COMPRESSED_BLKADDR and HOLE_BLKADDR.
		Conditionally include Compression as a supported type if
		ENABLE_COMPRESSION (via --enable-compression) is turned on.

	* swapfs.c (ext2fs_swap_super): Swap the compression usage bitmap.

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

	* bitops.h (ext2fs_mark_generic_bitmap, ext2fs_unmark_generic_bitmap,
		ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
		ext2fs_mark_inode_bitmap, ext2fs_unmark_inode_bitmap):
		Change to return the previous state of the bit that is
		being marked or unmarked.  For speed optimization.
	
2000-02-02  Theodore Ts'o  <tytso@valinux.com>

	* getsize.c, ismounted.c: Remove unneeded include of linux/fs.h

	* swapfs.c: Remove #ifdef HAVE_EXT2_INODE_VERSION since it's not
		needed any more; we know it will always be i_generation.
		Add support for swapping the high bits of the uid and gid.

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

	* mkdir.c (ext2fs_mkdir): Only update the parent's inode link
		counts if the link was successful.  Patch suggested by
		jeremy@goop.org.

	* 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>

	* Makefile.in (tst_badblocks): Add freefs.o to the object list,
		since ext2fs_badblocks_list_free was moved to freefs.c.

	* tst_badblocks.c: Use the newer badblocks API names.  Add
		duplicate blocks to the test inputs to test dealing with
		adding blocks which are already in the badblocks list.

	* badblocks.c (ext2fs_badblocks_list_add): If appending to the end
		of the list, use a shortcut O(1) operations instead of an
		O(n) operation.  (Idea suggested by David Beattie.)

	* freefs.c (ext2fs_free): Use ext2fs_badblocks_list_free() instead
		of badblocks_list_free(), to save a procedure call.

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

	* Release of E2fsprogs 1.17

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

	* ext2fs.h: Add kludge to deal with the fact that egcs cpp doesn't
		seem to handle ~0UL the same way as they used to.

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

	* nt_io.c (_OpenNtName): Open the device using
		FILE_SYNCHRONOUS_IO_NONALERT instead of
		FILE_SYNCHRONOUS_IO_ALERT
		(nt_open): At the end of the device open routine, unlock 
		the drive but do not dismount it.

	* initialize.c (CREATOR_OS): Use __GNU__ instead of __gnu__ to
		detect the Hurd OS.

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

	* Release of E2fsprogs 1.16

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

	* mkdir.c (ext2fs_mkdir): Pass EXT2_FT_DIR flag to ext2fs_link().

	* link.c (ext2fs_link): This call now uses the low three bits of
		the flags parameter to pass the directory filetype
		information; it will set the directory entry FILETYPE
		information if the filesystem supports it.

	* newdir.c (ext2fs_new_dir_block): If the FILETYPE superblock
		option is set, then create the '.' and '..' entries with
		the filetype set to EXT2_FT_DIR.

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

	* nt_io.c: New file which supports I/O under Windows NT.

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

	* ext2fs.h: Add new fields for journalling and define new
		feature bits used by newer filesystems: IMAGIC_INODES,
		HAS_JOURNAL, RECOVER.

	* expanddir.c (ext2fs_expand_dir, expand_dir_proc): Change where
		we update the inode block count and size files so that the
		block count field is updated correctly when we create an
		indirect block.

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

	* Release of E2fsprogs 1.15

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

	* swapfs.c (ext2fs_swap_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-06-21    <tytso@valinux.com>

	* dir_iterate.c (ext2fs_process_dir_block): Check for corrupted
		directory entry before calling the callback function.
		This should prevent some core dumps of insufficiently
		paranoid callback functions.

1999-05-29    <tytso@rsts-11.mit.edu>

	* ext2fs.h: Add feature definition for AFS IMAGIC inodes.

	* fileio.c (ext2fs_file_open): Remove obsolete comment stating
		that we don't handle writing yet (we do).  Fixed bug where
		we weren't allocating a big enough buffer for ext2_bmap.

1999-05-03    <tytso@rsts-11.mit.edu>

	* openfs.c (ext2fs_open): Check to make sure that the number of
		blocks per group is not zero --- if so, it must be a bad
		superblock!

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

	* Release of E2fsprogs 1.14

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

	* inode.c (ext2fs_read_inode, ext2fs_write_inode): Check to see if
		the inode number is zero; if it's zero, return
		EXT2_ET_BAD_INODE_NUM.

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

	* initialize.c (ext2fs_initialize): Use EXT2_FIRST_INODE instead
		of EXT2_FIRST_INO to ensure compatibility with Linux 1.2
		header files.

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

	* llseek.c (ext2fs_llseek): Change ext2fs_llseek() in the
 		non-Linux case to use EINVAL by default, unless it isn't
 		defined, in which case we use EXT2_ET_INVALID_ARGUMENT
 		instead.

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

	* initialize.c (ext2fs_initialize): Make sure that we allocate
		enough inodes so that we can make a valid filesystem.

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

	* rw_bitmaps.c: Fixed signed/unsigned warnings.

	* fileio.c (ext2fs_file_set_size): Remove unneeded extern from the
		function declaration.

	* dblist.c (make_dblist): Add safety check in case the dblist
		pointer passed in is null (in which case, assign it to
		fs->dblist).  Fixed some signed/unsigned warnings.

	* bmap.c: Make addr_per_block be of type blk_t to avoid
		signed/unsigned warnings.

	* namei.c (ext2fs_follow_link): Remove uneeded extern from the
		function declaration.

	* get_pathname.c (get_pathname_proc): Use return value from
		ext2fs_get_mem, instead of checking if &gp->name is
		NULL.

	* dir_iterate.c (ext2fs_process_dir_block): 
	* dblist_dir.c (ext2fs_dblist_dir_iterate): Remove uneeded extern
		from the function declaration.

	* block.c (ext2fs_block_iterate2): If the read_inode call fails,
		return the error directly instead of jumping to the
		cleanup routine, since we don't need to do any cleanup.

	* alloc_table.c (ext2fs_allocate_group_table): Make this
		function take a dgrp_t for its group argument.

	* ext2fs.h: Make dgrp_t an __u32 type, and make
		fs->desc_group_count be of type dgrp_t.

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

	* badblocks.c (ext2fs_badblocks_list_add): Use a bigger increment
		than 10 blocks when we need to expand the size of the
		badblocks list.

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

	* Release of E2fsprogs 1.12

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

	* closefs.c (ext2fs_flush): Update the s_block_group_nr field as
		appropriate for all of the block group copies, so that
		it's clear where the beginning of the filesystem is on the
		disk.  (For when the partition table gets scrod.)

	* ext2fs.h: Change the name of the feature from
		EXT2_FEATURE_INCOMPAT_DIRNAME_SIZE to
		EXT2_FEATURE_INCOMPAT_FILESIZE (to match with the kernel).

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

	* inode.c (get_next_blockgroup): Fix bug where if
		get_next_blockgroup() is called early because of a missing
		inode table in a block group, the current_inode counter
		wasn't incremented correctly.

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

	* read_bb.c (ext2fs_read_bb_inode): Make function more robust
		against a completely trashed bad block inode.

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

	* alloc_tables.c (ext2fs_allocate_group_table): Fix bug so that if
		the stride length hits a bad value, we retry the block
		allocation starting at the beginning of the block group.

	* ext2fs.h, bb_inode.c, block.c, bmove.c, dir_iterate.c,
		expanddir.c, ext2fsP.h, read_bb.c: Change blkcnt_t to be
		e2_blkcnt_t to avoid collision with LFS API.

1998-05-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* initialize.c (ext2fs_initialize): Initialize s_inodes_count in a
		way that avoids overflows on disk sizes greater than 4GB.

1998-04-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h: Define EXT2_QSORT_TYPE appropriately for the
		return type for comparison functions for qsort.

	* dblist.c (dir_block_cmp): Use EXT2_QSORT_TYPE in function
		declaration.

1998-04-26  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h, bitops.h: Add support for the Watcom C compiler to do
		inline functions.

	* ext2fs.h, dosio.c: Use asm/types.h instead of linux/types.h to
		evade a potential problem with glibc's header files trying
		to spike out linux/types.h.

	* ext2fs.h (ext2fs_resize_mem): Change the function prototype to
		include the old size of the memory, which is needed for
		some braindamaged memory allocation systems that don't
		support realloc().

	* badblocks.c (ext2fs_badblocks_list_add):
	  bb_inode.c (clear_bad_block_proc):
	  dblist.c (ext2fs_add_dir_block):
	  icount.c (insert_icount_el):
	  irel_ma.c (ima_put):
	  rs_bitmap.c (ext2fs_resize_generic_bitmap): Update functions to
		  pass the old size of the memory to be resized to
		  ext2fs_resize_mem(). 

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>

	* ext2fs.h: If __STRICT_ANSI__ is defined and we're on a platform
		with 32 bit longs, then we need to manually define __s64
		and __u64, since the current kernel header files don't
		define these if __STRICT_ANSI__ is defined.  This is a
		problem if we are compiling with full GCC warnings, since
		we do need 64 bit support.
	
	* Makefile.in (OBJS): Remove bmove.o from files to be built,
		since we're not using ext2fs_move_blocks() and there
		is some question as to its usefulness in its current
		form.

	* bmap.c (block_bmap): Remove unused function.

	* bmove.c (process_block): Fix -Wall warning.

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

	* block.c (ext2fs_block_iterate3): Make the ref_offset field
		contain the offset into the inode.i_blocks array when
		ref_block is zero.  Since we haven't done a formal
		release of e2fsprogs since block_iterate2 was first
		introduced, I removed block_iterate2, and renamed
		block_iterate3 to be block_iterate2.

	* bb_inode.c, bmove.c, dblist_dir.c, dir_iterate.c,
		expanddir.c, ext2fs.h, ext2fsP.h, read_bb.c: Change
		use of block_iterate and block_iterate2 to
		block_iterate2 with the new prototype for the
		interator function.  (using blkcnt_t forr blockcount)

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

	* ext2fs.h: Add new superblock fields (s_algorithm_usage_bitmap, 
		s_prealloc_blocks, s_prealloc_dir_blocks).  Added
		conditional defines of new features COMPAT_DIR_PREALLOC,
		RO_COMPAT_LARGE_FILE RO_COMPAT_BTREE_DIR,
		INCOMPAT_COMPRESSION, INCOMPAT_DIRNAME_SIZE.  Changed
		the library to declare that we support COMPAT_DIR_PREALLOC, 
		INCOMPAT_DIRNAME_SIZE, RO_COMPAT_LARGE_FILE.

	* fileio.c: Rename function ext2fs_file_llseek to be
		ext2fs_file_lseek, which is more accurate.

	* block.c: Add new function ext2fs_block_iterate3 which calls
		the iterator function with the blockcount argument of
		type blkcnt_t.  This version of the function is
		allowed to handle large files; the other fucntions are
		not.

	* ext2fs.h: Add new type blkcnt_t

	* ext2_err.et.in: Add error code EXT2_ET_FILE_TOO_BIG

	* block.c (ext2fs_block_iterate2): Fix bug where the block count
		field wasn't getting correctly incremented for sparse
		files when the indirect or doubly-indirect block
		specified in the inode was zero.

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

	* unlink.c (unlink_proc): 
	* lookup.c (lookup_proc): 
	* link.c (link_proc): 
	* get_pathname.c (get_pathname_proc): 
	* dir_iterate.c (ext2fs_process_dir_block): Mask off high 8 bits
		from dirent->name_len, so it can be used for other
		purposes.

	* ext2fs.h: Add definition of EXT2_FEATURE_INCOMPAT_DIRNAME_SIZE,
		and indicate that we have support for this incompatible
		option.

Mon Feb 23 08:46:33 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2_err.et.in: Added new error code, EXT2_ET_CANCEL_REQUESTED.

Fri Feb 20 23:58:01 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dblist.c (ext2fs_get_num_dirs): Improve the estimation of the
 		number of directories when the block group information is
 		unreliable.

1998-02-20  Theodore Y. Ts'o  <tytso@edt.mit.edu>

	* inode.c (ext2fs_get_next_inode): Always do the check to see if the
		inode table is missing so that we catch the case where the
		first block group is missing.

	* getsize.c, ismounted.c, unix_io.c: #include errno.h since it's
		needed.

Mon Feb 16 16:16:00 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2_io.h, ext2fs.h: Protect against being included multiple times.

	* bmove.c: #include ext2fsP.h instead of "ext2fs/ext2fs.h"

	* test_io.c (test_flush): Add a debugging printf when the flush
		method is called.

	* rw_bitmaps.c (ext2fs_read_bitmaps): If the bitmaps are already
		read in, return right away.

Sun Feb  1 08:20:24 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* bitops.h: Don't try to do i386 inline asm functions if the
 		compiler isn't GCC.

	* ext2fs.h: If EXT2_FLAT_INCLUDES is defined, #include e2_types.h,
 		instead of linux/types.h, and e2_bitops.h instead of
 		ext2fs/bitops.h.

	* icount.c, version.c: Don't #include <et/com_err.h>, as it isn't
		necessary. 

Sat Jan 17 13:13:31 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_open_inode_scan): Initialize the group variables
		so that we don't need to call get_next_blockgroup() the
		first time around.  Saves a bit of time, and prevents us
		from needing to assign -1 to current_group (which is an
		unsigned value).

	* icount.c (insert_icount_el): Cast the estimated number of inodes
		from a float to an ino_t.

	* alloc.c, alloc_tables.c, badlbocks.c, bb_compat.c, bb_inode.c,
 		bitmaps.c, bitops.c, block.c, bmap.c, bmove.c, brel_ma.c,
 		check_desc.c, closefs.c, cmp_bitmaps.c, dblist.c,
 		dblist_dir.c, dir_iterate.c, dirblock.c, dupfs.c,
		expanddir.c, ext2fs.h, fileio.c, freefs.c,
		get_pathname.c, getsize.c, icount.c, initialize.c,
		inline.c, inode.c, irel_ma.c, ismounted.c, link.c,
		lookup.c, mkdir.c, namei.c, native.c, newdir.c,
		openfs.c, read_bb.c, read_bb_file.c, rs_bitmap.c,
		rw_bitmaps.c, swapfs.c, test_io.c, tst_badblocks.c,
		tst_getsize.c, tst_iscan.c, unix_io.c, unlink.c,
		valid_blk.c, version.c: If EXT2_FLAT_INCLUDES is
		defined, then assume all of the
 		ext2-specific header files are in a flat directory.

	* block.c, bmove.c, dirblock.c, fileio.c: Explicitly cast
		all assignments from void * to be compatible with C++.

Tue Jan  6 11:28:15 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* closefs.c (ext2fs_flush): Add a call to io_channel_flush() to
		make sure the contents of the disk are flushed to disk.

Mon Dec 29 14:39:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dblist.c (ext2fs_add_dir_block): Change new to be new_entry to
		avoid C++ namespace clash.

	* bitmaps.c (ext2fs_copy_bitmap): Change new to be new_map to
		avoid C++ namespace clash.

	* ext2fs.h, bb_inode.c, block.c, bmove.c, brel.h, brel_ma.c,
 	 	irel.h, irel_ma.c, dblist.c, dblist_dir.c, dir_iterate.c,
 	 	ext2fsP.h, expanddir.c, get_pathname.c, inode.c, link.c,
 	 	unlink.c: Change private to be priv_data (to avoid C++
 	 	namespace clash)

Fri Nov 28 09:26:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dblist.c (ext2fs_get_num_dirs): Make ext2fs_get_num_dirs more
		paranoid about validating the directory counts from the
		block group information.

	* all files: Don't include stdlib.h anymore; include it in
		ext2_fs.h, since that file requires stdlib.h

Thu Nov 20 16:07:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* expanddir.c (ext2fs_expand_dir): Check to make sure the block
		bitmap is loaded, and return an error if it is not.
		(expand_dir_proc): Only use ext2fs_write_dir_block when
		writing a directory block, not when writing out a fresh
		indirect block.

Tue Nov 11 22:46:45 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in, tst_getsize.c: Added new file which is used to test
		the ext2fs_get_device_size function.

	* ext2_err.et.in (EXT2_ET_UNIMPLEMENTED): Added new error code.

Sun Nov  2 20:36:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h: Make ext2fs_get_mem take an unsigned argument.

	* fileio.c (ext2fs_file_get_size, ext2fs_file_set_size,
		ext2fs_file_get_fs): New functions added.


Fri Oct 31 12:16:52 1997    <tytso@EDT.MIT.EDU>

	* bitops.c (ext2fs_warn_bitmap, ext2fs_warn_bitmap2): Don't call
	 	com_err if OMIT_COM_ERR is defined.

Thu Oct 30 11:33:57 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Rename new error codes to _ET_ in them for consistency.

Sat Oct 25 00:06:58 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* [all files, basically]: Added definition of ext2fs_get_mem, 
		ext2fs_free_mem, and ext2fs_resize_mem in ext2fs.h, and
		changed all library routines to use these wrapper functions.

	* dblist.c, mkdir.c: use EXT2_DIR_EXISTS and EXT2_DB_NOT_FOUND
		instead of the system error messages.
	
	* ext2_err.et.in: Added new error messages EXT2_DIR_EXISTS and
	 	EXT2_DB_NOT_FOUND

	* ext2fs.h: Added function declarations and constants for bmap.c
	 	and fileio.c.

	* ext2_err.et.in: Added new error messages EXT2_FILE_RO and
	 	EXT2_ET_MAGIC_EXT2_FILE

	* Makefile.in: Added files bmap.c and fileio.c, and temporarily
		commented out brel_ma.c and irel_ma.c

	* bmap.c: New file which maps a file's logical block number to its
		physical block number.

	* fileio.c: New file which implements simple file reading and
		writing primitives.

	* alloc.c (ext2fs_alloc_block): New function which allocates a
 		block, zeros it, and updates the filesystem accounting
 		records appropriately.

Wed Oct 22 16:47:27 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2_err.et.in: Added new error codes: EXT2_NO_MEMORY,
		EXT2_INVALID_ARGUMENT, EXT2_BLOCK_ALLOC_FAIL,
		EXT2_INODE_ALLOC_FAIL, EXT2_NOT_DIRECTORY

	* Change various library files to use these functions instead of
		EINVAL, ENOENT, etc.

Mon Oct 20 19:32:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* llseek.c: Check HAVE_LLSEEK_PROTOTYPE to see whether or not we
		need to declare llseek().

Sun Oct 19 18:56:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Rename io.h to be ext2_io.h (avoid namespace collisions)

	* Add #ifdef's for HAVE_SYS_STAT_H and HAVE_SYS_TYPES_H

Fri Oct  3 13:35:59 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* llseek.c (ext2fs_llseek): Fix type error for ext2fs_llseek()

	* icount.c (ext2fs_icount_validate): 
	* bmove.c (process_block): Fix lint error in type for fprintf().

Mon Sep 15 11:45:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_check_directory): Add support for the callback
		to return the error code EXT2_ET_CALLBACK_NOTHANDLED.

Thu Sep  4 12:28:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* bitmaps.c (ext2fs_set_bitmap_padding): New function which sets the
		padding of the bitmap to be all one's.

Wed Sep  3 14:27:30 1997  Theodore Y. Ts'o  <tytso@edt.mit.edu>

	* llseek.c: Added missing semicolon to glibc fixup declaration of
 	llseek().

	* bmove.c: Add #include of errno.h

Sat Aug 23 22:47:46 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (ELF_SO_VERSION): Bump version to be 2.4 since we've
		added a new field to the io_channel (app_data).

	* io.h: Add a new element to the io_channel structure, app_data.

	* initialize.c, openfs.c: Set io->app_data to point at the
	 	filesystem handle.

Thu Aug 14 08:14:17 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* io.h: Change the prototype of ext2fs_llseek() to use int's
		instead of unsigned int's.

	* llseek.c: Change to allow PIC and !HAVE_LLSEEK.  Add a prototype
		to make life easer for GNU Libc 2.

	* rw_bitmaps.c: On the PowerPC, the big-endian variant of the ext2
 		filesystem has its bitmaps stored as 32-bit words with bit
 		0 as the LSB of each word.  Thus a bitmap with only bit 0
 		set would be, as a string of bytes, 00 00 00 01 00 ...  To
 		cope with this, we byte-reverse each word of a bitmap if
 		we have a big-endian filesystem, that is, if we are *not*
 		byte-swapping other word-sized numbers.

Mon Aug 11 03:30:48 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dosio.c: New file to do DOS/BIOS disk accesses.

	* namei.c (open_namei): Make pathlen be of type size_t.

	* llseek.c: Always #include stdlib.h since it's need to define
		size_t.  

	* io.h: Use errcode_t for magic numbers.

	* icount.c (get_icount_el): Use size_t where appropriate
	
	* dupfs.c (ext2fs_dup_handle): 
	* dblist.c (dir_block_cmp): Use size_t where appropriate.

	* read_bb.c (ext2fs_read_bb_inode): 
	* cmp_bitmaps.c (ext2fs_compare_inode_bitmap): Use blk_t, ino_t
		and size_t where appropriate.

	* closefs.c (ext2fs_flush): Use dgrp_t instead of int where
		appropriate.

	* openfs.c (ext2fs_open): 
	* check_desc.c (ext2fs_check_desc): Use blk_t instead of int where
		appropriate.

	* rw_bitmaps.c (read_bitmaps): 
	* irel_ma.c: 
	* inode.c (ext2fs_write_inode): 
	* initialize.c (ext2fs_initialize):
	* brel_ma.c: Fix to make be 16-bit safe.

	* link.c (ext2fs_link): 
	* unlink.c (ext2fs_unlink):
	* lookup.c (lookup_proc): 
	* ismounted.c (ext2fs_check_if_mounted): 
	* block.c (xlate_func): Add #pragma argsused for Turbo C.

Sun Aug 10 10:05:22 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* block.c (ext2fs_block_iterate2): Use retval which is a errcode_t
		type.

	* bitmaps.c (make_bitmap): Use size_t instead of int where
		appropriate.

	* bb_inode.c (set_bad_block_proc): Add #pragma argsused for Turbo C.

	* alloc.c (ext2fs_new_inode): Use ino_t instead of int for the
		group number.

	* get_pathname.c: Use ino_t instead of int where appropriate.

	* ext2fs.h: Make the magic structure element be errcode_t instead
		of int.

	* alloc.c alloc_tables.c badblocks.c bb_compat.c bb_inode.c
 	 	bitmaps.c block.c bmove.c brel_ma.c check_desc.c closefs.c
 	 	cmp_bitmaps.c dblist.c dblist_dir.c dir_iterate.c
 	 	dirblock.c dupfs.c expanddir.c freefs.c get_pathname.c
 	 	icount.c initialize.c inline.c inode.c irel_ma.c link.c
 	 	llseek.c lookup.c mkdir.c namei.c newdir.c read_bb.c
 	 	read_bb_file.c rs_bitmap.c rw_bitmaps.c swapfs.c 
 	 	test_io.c tst_badblocks.c tst_iscan.c unix_io.c unlink.c
 	 	valid_blk.c version.c: Add an #ifdef for HAVE_UNISTD_H

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

	* unix_io.c (unix_read_blk): If ext2fs_llseek() fails, but errno
		is zero, then return EXT2_IO_LLSEEK_FAILED.

	* ext2_err.et.in: Add a new error code, EXT2_IO_LLSEEK_FAILED.

	* Release of E2fsprogs 1.11

Mon Jun 16 23:53:06 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dblist.c (ext2fs_dblist_count): Added new function which returns
		the number of directory blocks in dblist.

Sat Jun 14 01:39:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* unix_io.c (unix_flush): Make the io_channel flush function do a
		fsync to flush the kernel buffers to disk.

Wed Jun 11 18:25:31 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_inode_scan_goto_blockgroup): Fix bug; the
		current inode number wasn't being set by the
		goto_blockgroup function.

Mon Jun  9 10:45:48 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* bmove.c (ext2fs_move_blocks): New function which takes a bitmap
		of blocks which need to be moved, and moves those blocks
		to another location in the filesystem.

	* rs_bitmap.c (ext2fs_resize_generic_bitmap): When expanding a
		bitmap, make sure all of the new parts of the bitmap are
		zero. 

Sun Jun  8 16:24:39 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* bitmaps.c (ext2fs_copy_bitmap): Fix bug; the destination bitmap
		wasn't being returned to the caller.

	* alloc_tables.c (ext2fs_allocate_group_table): Add new function
		ext2fs_allocate_group_table() which sets the group tables
		for a particular block group.  The relevant code was
		factored out of ext2fs_allocate_tables().

	* dblist.c (make_dblist): Adjust the initial size of the directory
 		block list to be a bit more realistic (ten plus twice the
 		number of directories in the filesystem).

Thu May  8 22:19:09 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.c (ext2fs_badblocks_list_test): Fix bug where
 		ext2fs_badblocks_list_test would test the list (and exceed
 		array boundaries) if there were no bad blocks on the bad
 		blocks list.  (Showed up when user tried: mke2fs -c -b 4096).

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

	* Release of E2fsprogs version 1.10

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

	* alloc_tables.c (ext2fs_allocate_tables): Correctly place the
		inode and block bitmaps based on the RAID 0 stride
		parameter (which is passed by mke2fs).

	* ext2fs.h: Add "stride" parameter to ext2_filsys, to be used by
 		mke2fs to communicate the stride length to
 		ext2fs_allocate_tables()

Wed Apr 23 21:50:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* initialize.c (ext2fs_initialize): Fix to compile under Linux 1.2
		systems.  (We can't assume that the new filesystem types
		are supported.)

Wed Apr 23 18:40:53 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* alloc_tables.c (ext2fs_allocate_tables): Make sure that we
		allocate the inode and block bitmaps inside block group at
		all times.

Mon Apr 21 00:06:28 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* alloc.c (ext2fs_new_block): Fix bug where if goal==0 and the
		filesystem has no free blocks, ext2fs_new_block would loop
		forever.

	* dupfs.c (ext2fs_dup_handle): Duplicate an ext2 filesystem handle

	* freefs.c (ext2fs_free_inode_cache): Decrement refcount and only
		free if refcount goes to zero.

	* inode.c (create_icache): Initialize refcount to 1.

	* ext2fsP.h: Added refcount to ext2_inode_cache

	* dblist.c (ext2fs_copy_dblist): New function to copy a directory
		block list.

	* badblocks.c (ext2fs_badblocks_copy): New function to copy a
		badblocks structure.

Sun Apr 20 23:19:51 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* bitmaps.c (ext2fs_copy_bitmap): New function to copy a bitmap.

	* unix_io.c, test_io.c (unix_open, test_open): Initialize the
 	 	refcount to 1.
		(unix_close, test_close): Decrement the refcount and only
 		close the io_channel if the refcount goes to 0.

	* io.h: Add refcount to the io_channel structure.  Add new macro
		interface io_channel_bumpcount() to bump the refcount.

Thu Apr 17 20:25:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_read_inode, ext2fs_write_inode): Use the inode
		cache in the filesystem handle, instead of the inode cache
		in a static variable.

	* freefs.c: Added static function to free the inode cache (called by
		ext2fs_free). 

	* ext2fsP.h: Added definition of the ext2_inode_cache structures.

	* ext2fs.h: Added pointer to the inode_cache structure.

	* block.c (block_iterate_ind, block_iterate_dind, 
		block_iterate_tind): If there are holes in the indirect,
		doubly indirect, or triply indirect blocks, increment the
		block count field automatically.

Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.09

Mon Apr 14 20:38:56 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* version.c (ext2fs_parse_version_string): Check the passed in
		version string (instead of the hard-coded one).

	* alloc_tables.c (ext2fs_allocate_tables): If the last block is
		greater filesystem size, clamp it to prevent allocating a
		block or inode bitmap beyond the filesystem.

	* initialize.c (ext2fs_initialize): Fix bug where the metatdata
	 	overhead calculation was accidentally removed.

Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.08

Thu Apr 10 13:15:15 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dblist.c (ext2fs_set_dir_block): New function which sets the
 		block of a dblist entry, given the directory inode and
 		blockcnt.

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

	* alloc_tables.c (ext2fs_allocate_tables): Allocate the bitmap and
		inode bitmaps at staggered locations across the block
		groups, to avoid concentrating the bitmaps on a small
		number of disks when using striped RAID arrays.

	* initialize.c (ext2fs_initialize): By default, choose the maximum
		possible number of blocks per group (based on the size of
		the bitmaps in the blocksize).

Fri Apr  4 11:28:16 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* initialize.c (ext2fs_initialize): Add support for
		EXT2_COMPAT_SPARSE_SUPER feature.

	* closefs.c (ext2fs_bg_has_super): New function to determine
		whether or a particular block group should have a
		superblock and block group descriptor.  Used for the
		EXT2_COMPAT_SPARSE_SUPER feature is turned on.
		(ext2fs_flush):  Check ext2fs_bg_has_super to see whether
		or not the superblock should be written out for the block
		group. 

	* ext2fs.h (EXT2_COMPAT_SPARSE_SUPER): Define compatibility flag
		for sparse duplicate superblocks.

	* version.c (ext2fs_get_library_version): New function which
		returns the library version.

	* version.c (ext2fs_parse_version_string): New function which
		parses a version string and returns a version number,
		so application programs can compare version numbers as
		integers.

Wed Mar 26 00:43:52 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* icount.c (ext2fs_create_icount): Change function so that it also
		takes a new argument which contains a "hint" icount
		structure.  This "hint" icount allows the create function
		to set up the sorted list in advance.  This reduces
		significantly the amount of data moving needed to insert
		these inodes into the list later.
	
	* icount.c (ext2fs_icount_validate): New function which validates
		that the icount structure's rep invariant.

	* icount.c (get_icount_el): Completely revamped implementation
		to subsume put_icount_el().  Put_icount_el() used to
		use an O(N) implementation to insert in the middle
		of the icount list.  It now uses a O(ln N) to search
		for where the icount should be inserted, and then uses
		a memcpy to move the list down (instead of a for loop).
	
	* icount.c (ext2fs_icount_fetch, ext2fs_icount_store,
 		ext2fs_icount_increment, ext2fs_icount_decrement): Check
 		to see if the inode is within bounds; if it isn't, return
 		EINVAL.

	* bitops.h (ext2fs_test_generic_bitmap): Fix error message given
 		when a bad inode number is passed to test_generic_bitmap
 		to be EXT2FS_TEST_ERROR instead of the wrong
 		EXT2FS_UNMARK_ERROR.

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

	* Release of E2fsprogs version 1.07

Sun Mar  2 16:46:18 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (ELF_VERSION): Change version to be 2.2

Tue Feb 11 14:54:02 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* alloc.c (ext2fs_get_free_blocks): Change routine to use
	 	ext2fs_fast_test_block_bitmap_range().

	* bitops.h (ext2fs_fast_test_block_bitmap_range,
 		ext2fs_test_block_bitmap_range: New inline functions which
 		test to see whether a contiguous range of blocks is
 		available.

Thu Feb  6 10:00:13 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* badblocks.c (ext2fs_badblocks_list_create): Rename sybmols to use
 		use ext2fs_badblocks_* instead of badblocks_*

	* bb_compat.c: New file which translates between old badblocks_*()
		names to ext2fs_badblocks_*()

	* unlink.c (ext2fs_unlink): New file, moved ext2fs_unlink() from
	 	link.c (since e2fsck doesn't use ext2fs_unlink()).

	* rs_bitmap.c (ext2fs_resize_generic_bitmap): New file, contains
 		bitmap resizing routine moved from bitmaps.c, since e2fsck
 		doesn't need to use this function.

	* lookup.c (ext2fs_lookup): Moved ext2fs_lookup to its own file,
		since e2fsck only needs ext2fs_lookup.

Mon Feb  3 10:11:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_open_inode_scan): Set fs->badblocks if it is not
		already set; this is needed so that programs like dump
		which use the inode scan functions will deal with
		filesystems that have bad blocks in the inode table.

Sun Feb  2 00:17:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h (struct_badblocks_list, struct_badblocks_iterate): 
		Moved to ext2fsP.h, since it doesn't need to be part of
		the public interface.

	* dir_iterate.c: Move ext2_dir_iterate out of namei.c.

Sat Feb  1 10:14:55 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* dblist.c (ext2fs_get_num_dirs): New file, which implements a
 		directory block list abstraction.  (Code moved from
 		e2fsck).

	* ext2fs.h, inode.c: Moved definition of ext2_struct_inode_scan to
		to inode.c (since no one else should be peeking inside it!)

	* valid_blk.c (ext2_inode_has_valid_blocks): New function.

	* openfs.c (ext2fs_open): Check the feature set in the ext2
		superblock, and refuse to open filesystems if they contain
		incompatible features.  (Can be overriden with the
		EXT2_FLAG_FORCE 

Sun Jan 12 11:31:46 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* block.c (ext2fs_block_iterate2): Added new function
	 	ext2fs_block_iterate2 which changes the function
	 	signature of the callback function to include the
	 	referencing block and offset.

	* inode.c (ext2fs_inode_scan_goto_blockgroup): Added new function
	 	ext2fs_inode_scan_goto_blockgroup which allows an
	 	application to jump to a particular block group while
	 	doing an inode scan.

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

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

Tue Dec  3 12:27:29 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* getsize.c (ext2fs_get_device_size): The ioctl BLKGETSIZE returns
		a long not an int; this doesn't matter on i386 machines,
		but it does on Alpha's.
	
Fri Nov 29 20:57:37 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_write_inode, ext2fs_read_inode): If the inode
 		table pointer is NULL, then return an error indicating
 		that the inode table is missing.
		(get_next_blockgroup, get_next_blocks,
 		ext2fs_get_next_inode): Don't treat a missing inode table
 		as permanent error.  Return MISSING_INODE_TABLE, but as an
 		advisory error code, much like BAD_BLOCK_IN_INODE_TABLE.

	* rw_bitmaps.c (ext2fs_write_block_bitmap,
 	 	ext2fs_write_inode_bitmap): If the inode or block bitmap
 	 	block is zero, then don't write out the inode or block
 	 	bitmap.  The idea here is to avoid stomping on the
 	 	superblock.
		(read_bitmaps): If the inode or block bitmap block is
	 	zero, then fill in that portion of the inode or block
	 	bitmap with all zeros.

	* inode.c (ext2fs_get_next_inode): Fix bug in handling of bad
 		blocks in inode table when the inode table size is
 		non-standard (and can therefore span blocks).

Tue Oct 29 20:13:14 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* alloc.c (ext2fs_new_block): Fix fencepost error in
		ext2fs_new_block; make sure we don't try to allocate the
		first block beyond the end of the filesystem.

Mon Oct 14 11:00:48 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (check_for_inode_bad_blocks): New function called by
		get_next_blocks() to avoid reading in bad blocks marked in
		fs->badblocks.  Inodes located in bad blocks are returned
		by ext2fs_get_next_inode() returns the error code 
		EXT2_ET_BAD_BLOCK_IN_INODE_TABLE.
	
	* alloc_tables.c (ext2fs_allocate_tables): New function which
		performs the part of mke2fs's job of allocating the 
		filesystem tables.

	* test_io.c (test_close): IO manager which is used for testing
	 	purposes.

Sun Oct 13 04:31:57 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_get_next_inode): Separate out the function of
 		setting up for a new block group to get_next_blockgroup().
		Separate out the function of reading in blocks of the
		inode table to get_next_blocks().

	* ext2fs.h: Add the badblocks list to the ext2_filsys entry

	* badblocks.c (badblocks_list_add, badblocks_list_test): Add
 		blocks to the badblock list in sorted order.  This allows
 		badblocks_list_test to be coded using a binary search for
 		speed.

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

	* Release of E2fsprogs version 1.06

Mon Oct  7 00:44:17 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h, block.c, closefs.c, dirblock.c, inode.c, native.c,
	 	open.c: Change EXT2_SWAP to EXT2_FLAG_SWAP for
	 	consistency's sake.
	
	* closefs.c (ext2fs_flush): If the flag EXT2_MASTER_SB_ONLY is
		set, then only write out the master superblock.

Sun Oct  6 21:45:26 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* block.c (ext2fs_block_iterate): Fixed bug which caused
 		block_iterate to fail to handle HURD created filesystems;
 		it tested the inode translator field before the inode was
 		loaded.

Tue Sep 17 14:08:24 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* initialize.c (ext2fs_initialize): Make sure the description for
		the inode bitmap is set correctly.

	* bitmaps.c (ext2fs_allocate_generic_bitmap): Fix minor type typo.

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

	* Release of E2fsprogs version 1.05

Sat Sep  7 07:36:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* initialize.c: Override the kernel's idea of default
		checkinterval from 0 (never) to 180 days.

Wed Aug 28 03:20:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* namei.c (ext2fs_namei_follow): New function which follows
		symbolic link (if any) at the target.

Tue Aug 27 01:48:43 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_read_inode, ext2fs_write_inode): Add support
		for shortcut function fs->read_inode() and fs->write_inode().
		Added inode_cache to reduce CPU time spent in doing
		byte swapping.

	* swapfs.c (ext2fs_swap_super): Swap the new fields in a V2
	 	superblock.

	* namei.c (ext2fs_follow_link): New function.
		(ext2fs_namei): Extended to have support for chasing
 		symbolic links.  ext2fs_namei() still returns an inode
 		which is a symbolic link.  Symbolic links are only chased
 		while resolving the containing directory.  To chase
 		symbolic links of the final result, use
 		ext2fs_follow_link().

Mon Aug 26 23:46:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2_err.et.in: Added new error code EXT2_ET_SYMLINK_LOOP.

	* bitops.h (ext2fs_set_bit, ext2fs_celar_bit): Use asm inlines
		provided by Pete A. Zaitcev (zaitcev@lab.sun.mcst.ru).

Thu Aug 22 00:40:18 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* initialize.c (ext2fs_initialize): On systems where the byte
		order is not i386 compatible, set the swap_byte flag.

	* inode.c (inocpy_with_swap): Check to see if inode contains a
		fast symlink before swapping the inode block fields.  This
		required adding a new argument to inocpy_with_swap to
		determine whether the mode field is in host order or not.

Wed Aug 21 00:45:42 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* bitops.h (ext2fs_set_bit, ext2fs_clear_bit, ext2fs_test_bit): On
		the sparc, if EXT2_STD_BITOPS set, use the standard
		i386-compatible bitmask operations, instead on the
		non-standard native bitmask operators.

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

	* block.c (ext2fs_block_iterate): Cause block iterator to return
		the HURD translator block (along with everything else).
		If the flag BLOCK_FLAG_DATA_ONLY is passed to the block
		iterator, then don't return any meta data blocks
		(including the HURD translator).

Wed Jul 17 17:13:34 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* gen_uuid.c: New file, which generates DCE-compatible UUIDs.

	* uuid.c: New file, containing UUID utility functions.

Tue Jul 16 10:19:16 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h: Add a definition of the "real" ext2 superblock.

Fri May 24 14:54:55 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* ext2fs.h: Fix erroneous ino_t type used in block_bitmap type.

Sun May 19 15:39:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* openfs.c (ext2fs_open): If the blocksize in the superblock is
		zero, return the error EXT2_ET_CORRUPT_SUPERBLOCK, since
		that's a basic value that must be correct for the rest of
		the library to work.

	* ext2_err.et.in (EXT2_ET_CORRUPT_SUPERBLOCK): Added new error
	 	code.

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

Tue Mar 26 12:06:32 1996    <tytso@rsts-11.mit.edu>

	* bitops.h (ext2fs_set_bit, ext2fs_clear_bit, ext2fs_test_bit):
		Change the m68k bit numbering for bitmasks to match with
		the bit numbering used by all other ext2 implementations.

Thu Mar  7 03:37:00 1996    <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_get_next_inode, ext2fs_close_inode_scan, 
	ext2fs_open_inode_scan): Support dynamically-sized inodes.

Wed Mar  6 12:26:29 1996    <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_read_inode, ext2fs_write_inode): Support
		dynamically-sized inodes.

	* openfs.c (ext2fs_open): Allow dynamic revision filesystem to be
	        loaded.

Tue Mar  5 03:49:37 1996    <tytso@rsts-11.mit.edu>

	* initialize.c (ext2fs_initialize): Catch an error condition where
		the passed in size is *really* too small.

	* alloc.c (ext2fs_new_inode): 
	* ext2fs.h (EXT2_FIRST_INODE): Add support for dynamic revision to
		get first inode.

Wed Feb 21 15:56:17 1996    <tytso@rsts-11.mit.edu>

	* getsize.c (ext2fs_get_device_size): Open the device read-only
		when trying to determine its size.

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

	* Release of E2fsprogs version 1.02

Sat Dec  9 09:57:50 1995    <tytso@rsts-11.mit.edu>

	* rw_bitops.c (ext2fs_write_block_bitmap):
	* bitops.c (ext2fs_test_bit, ext2fs_clear_bit, ext2fs_set_bit):
	* bitops.h (ext2fs_test_bit, ext2fs_clear_bit, ext2fs_set_bit):
		Rename {test,set,clear}_bit to ext2fs_{test,set,clear}_bit, 
		to avoid conflicts with with kernel include files.  Also
		rename ADDR and CONST_ADDR to EXT2FS_ADDR and
		EXT2FS_CONST_ADDR. 

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

	* ext2_err.et: Updated message in EXT2_ET_BASE to say version 0.5c

	* swapfs.c (ext2fs_swap_super): Put an #ifdef check around
		s_def_resuid and s_def_resgid for backwards compatibility.

Fri Oct 20 23:33:31 1995    <tytso@rsts-11.mit.edu>

	* bitops.h: Added #ifdef's for Sparc.

Wed Sep  6 22:14:46 1995    <tytso@rsts-11.mit.edu>

	* getsize.c: #include <sys/ioctl.h> under Linux to pick up ioctl()
	        declaration

	* closefs.c: #include <string.h> to pick up memset() declaration

Mon Sep  4 21:45:29 1995  Remy Card  <card@bbj>

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

	* initialize.c (ext2fs_initialize): Correctly set the s_creator_os
		flag.

Mon Sep  4 09:55:30 1995    <tytso@rsts-11.mit.edu>

	* unix_io.c (unix_open): Add a double check; if the passed in name
		is NULL, return EXT2_ET_BAD_DEVICE_NAME.

	* ext2_err.et (EXT2_ET_BAD_DEVICE_NAME): Added new error code

Wed Aug 16 15:44:10 1995    <tytso@rsts-11.mit.edu>

	* inode.c (ext2fs_check_directory): Use LINUX_S_ISDIR instead of
		S_ISDIR.

Tue Aug 15 13:08:36 1995    <tytso@rsts-11.mit.edu>

	* getsize.c (ext2fs_get_device_size): Add support for reading the
		partition size from a BSD disk label.

Thu Aug 10 09:33:26 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* getsize.c (ext2fs_get_device_size): New function that determins
		the size of a device.  Used by mke2fs and e2fsck.

Sat Aug 12 03:09:54 1995  Remy Card  <card@bbj>

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

Wed Aug  9 17:04:23 1995  Theodore Y. Ts'o  <tytso@dcl>

	* bitmaps.c (ext2fs_free_inode_bitmap, ext2fs_free_block_bitmap):
		Move these functions to freefs.c.

	* closefs.c (ext2fs_flush): If swapping blocks, clear the group
		descriptors shadow memory to keep purify quiet.  (This
		also has the nice benefit that the unused portion of the
		shadow descriptors are zeroed out.)

	* dirblock.c (ext2fs_write_dir_block): We need to use
		dirent->rec_len *before* it's byteswapped to find the
		location of the next directory structure!

	* alloc.c (ext2fs_new_inode): Fix bug which could potentially
		cause ext2fs_new_inode to loop infinitely if we're trying
		to allocate an inode in group #0 and there are no free
		inodes at all in the system.

	* closefs.c: #include <errno.h> if it exists.

Sun Aug  6 13:27:50 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* ext2fs.h (BLOCK_FLAG_HOLE): Added new definition for
		BLOCK_FLAG_APPEND.  Added documentation for the block
		interator flags.

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

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

Tue Jul 18 09:27:38 1995    <tytso@rsx-11.mit.edu>

	* namei.c (process_dir_block): 
	* mkdir.c (ext2fs_mkdir): 
	* expanddir.c (expand_dir_proc): Use ext2fs_{read,write}_dir_block
		to read/write the directory block.

	* dirblock.c (ext2fs_read_dir_block), ext2fs_write_dir_block): New
		file containing functions for reading and writing
		directory blocks (byte swapping if necesssary)

	* block.c (block_iterate_ind, block_iterate_dind, 
		block_iterate_tind): Byte swap the block addresses if
		EXT2_SWAP_BYTES is set (and swap them back before writing
		them out.)

	* inode.c (inocpy_with_swap): New function.
	(ext2fs_get_next_inode, ext2fs_read_inode, ext2fs_write_inode):
		Call inocpy_with_swap if EXT2_SWAP_BYTES if set.

	* closefs.c (ext2fs_flush): If EXT2_SWAP_BYTES is set, then swap
		the superblock and group descriptors before writing it out.

	* openfs.c (ext2fs_open): If the magic number is byte-swapped,
		then set the EXT2_SWAP_BYTES and byte-swap the superblock
		and group descriptors.

	* swapfs.c (ext2fs_swap_super, ext2fs_swap_group_desc): New functions
		to desp ext2 filesystem structures.

	* bitops.c (set_bit, clear_bit, test_bit): Use modifications
		supplied by Pete A. Zaitcev so that the C language
		versions of these functions are more portable.  They will
		now work on both little and big endian systems, and the
		assumption that 32-bit integers are used is gone.

	* bitops.h (ext2_swab16, ext2_swab32): Added new functions for
		doing byte swapping.

	* ext2fs.h (EXT2_SWAP_BYTES): Add new flag which indicates that
		byte swapping should take place.

Sun Jul 16 06:21:43 1995    <tytso@rsx-11.mit.edu>

	* Makefile.in, cmp_bitmaps.c (ext2fs_compare_block_bitmap_end,
	        ext2fs_compare_inode_bitmap_end): Added new file
		containing routines to compare bitmaps.

	* ext2_err.et (EXT2_ET_NEQ_BLOCK_BITMAP, EXT2_ET_NEQ_INODE_BITMAP): 
		Added new error codes.

Sat Jul 15 04:23:37 1995    <tytso@rsx-11.mit.edu>

	* inode.c (ext2fs_get_next_inode): Don't check scan->inode_buffer;
		if the magic number is correct, it will be allocated.

Fri Jul 14 19:02:59 1995    <tytso@rsx-11.mit.edu>

	* block.c (block_iterate_ind, block_iterate_dind, 
		block_iterate_tind): Don't recompute block_nr each loop;
		just increment it!  Factor check of BLOCK_FLAG_APPEND out
		of the loop.  Factor mask of BLOCK_CHANGED into changed
		variable out of the loop.  (block_iterate_ind, in
		particular, gets called a lot, so every little
		optimization helps.)

Thu Jul 13 08:02:45 1995    <tytso@rsx-11.mit.edu>

	* block.c (block_iterate_ind, block_iterate_dind, 
		block_iterate_tind): Precompute limit of loop to speed up
		block_iterate_ind and company.

	* bitops.h (ext2fs_fast_mark_block_bitmap, 
		ext2fs_fast_unmark_block_bitmap, ext2fs_fast_test_block_bitmap,
		ext2fs_fast_mark_inode_bitmap, ext2fs_fast_unmark_inode_bitmap,
		ext2fs_fast_test_inode_bitmap): Add fast version of these
		functions, which don't do range checking.

	* bitops.h (ext2fs_get_block_bitmap_start, 
		ext2fs_get_inode_bitmap_start, ext2fs_get_block_bitmap_end,
		ext2fs_get_inode_bitmap_end): Add new accessor functions
		which return the start and end points of the bitmaps.

Tue Jul 11 18:59:41 1995    <tytso@rsx-11.mit.edu>

	* llseek.c (ext2_llseek): If the offset is small enough, use lseek
		instead of llseek.  The errno if the offset is too large
		and lseek is not supported should be EINVAL, not -EINVAL.

Thu Jun 15 23:43:02 1995  Remy Card  <card@bbj>

	* Makefile.in: Added support for ELF shared libraries.
		Fixed typos in the compilation rules.
		(distclean): Added Makefile.

	* llseek.c (llseek): New function, if llseek() does not exist in the
	C library.
	(ext2_llseek): Changed to call llseek().

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

	* ext2fs.h: Use __u32 to define blk_t, instead of unsigned long.

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

	* mkdir.c (ext2fs_mkdir): Use LINUX_S_IFDIR instead of S_IFDIR.

	* ext2fs.h (LINUX_S_IFDIR): Define a linux specific versions of
		the S_*, which are normally defined in <sys/stat.h>.  This
		allows us to compile e2fsprogs on a non-Linux system,
		which may have a different value for S_IFDIR.

Sat Jun 10 23:47:05 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* bitops.c (clear_bit, set_bit): Remove calls to cli() and sti();
		this is a user-mode application!

Thu Jun  8 13:13:22 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* llseek.c: Put the include of <linux/unistd.h> inside the #ifdef
	__linux__ so that non-linux systems won't see it.

	* alloc.c: Include <errno.h> if possible.
	* badblocks.c: Ditto.
	* bb_inode.c: Ditto.
	* bitmaps.c: Ditto.
	* block.c: Ditto.
	* expanddir.c: Ditto.
	* get_pathname.c: Ditto.
	* initialize.c: Ditto.
	* inode.c: Ditto.
	* llseek.c: Ditto.
	* mkdir.c: Ditto.
	* namei.c: Ditto.
	* newdir.c: Ditto.
	* openfs.c: Ditto.
	* rw_bitmaps.c: Ditto.
	* unix_io.c: Ditto.

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

Thu May 11 04:13:12 1995    <tytso@rsx-11.mit.edu>

	* initialize.c (ext2fs_initialize): Don't allow more than one
		bitmaps's worth of inodes in a group.

Sat Mar 11 14:07:11 1995  Theodore Y. Ts'o  <tytso@localhost>

	* llseek.c (ext2_llseek): Added error checking to the llseek()
		compat code to protect against overflow.  This only
		applies to 1.0 and early 1.1 kernels, which don't support
		the llseek() system call.

Thu Nov 24 16:29:00 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* unix_io.c (unix_open): Initialize the read_error and write_error
		io_channel pointers to be null.

	* bb_inode.c (clear_bad_block_proc): If an illegal block number is
		found, clear it but don't try to update the filesystem
		accounting information, since that's hopeless anyway.

	* block.c (bloblock_iterate_ind, bloblock_iterate_dind,
	bloblock_iterate_tind): Check to see if the indirect blocks are
		valid before trying to read them.

	* ext2_err.et (EXT2_ET_BAD_IND_BLOCK, EX2_ET_BAD_DIND_BLOCK,
	EXT2_ET_BAD_TIND_BLOCK): Add new error codes.

	* bitops.h (ext2fs_mark_block_bitmap, ext2fs_unmark_block_bitmap,
	ext2fs_test_block_bitmap, ext2fs_mark_inode_bitmap,
	ext2fs_unmark_inode_bitmap, ext2fs_test_inode_bitmap):  If an
		illegal block or inode number is passed in, return instead
		of trying to test, set, or clear the bit.

Mon Nov  7 21:32:33 1994  Remy Card  <card@bbj>

	* Makefile: Added a dummy install target in case shared libraries
		are not built.

Mon Oct 24 14:11:44 1994    (tytso@rsx-11)

	* bitmaps.c (ext2fs_allocate_block_bitmap): Fix calculation of how
		the real last block of the bitmap should be calculated.

Wed Sep  7 10:05:36 1994    (tytso@rsx-11)

	* bitmaps.c (ext2fs_fudge_inode_bitmap_end, 
		ext2fs_fudge_block_bitmap_end, ext2fs_clear_inode_bitmap,
		ext2fs_clear_block_bitmap, ext2fs_free_inode_bitmap,
		ext2fs_free_block_bitmap): Add magic number checking for
		the inode and block bitmaps.

	* bitmaps.c (ext2fs_allocate_block_bitmap): Fix to set the correct
		magic number for a block bitmap instead of an inode bitmap.

	* inode.c (ext2fs_close_inode_scan, ext2fs_get_next_inode):  Add
		magic number checking for the inode_scan structure.

	* badblocks.c (badblocks_list_free, badblocks_list_add, 
		badblocks_list_test, badblocks_list_iterate_begin,
		badblocks_list_iterate, badblocks_list_iterate_end): Add
		magic number checking for the badblocks_list and
		badblocks_iterate structures.

	* ext2_err.et (EXT2_ET_MAGIC_UNIX_IO_CHANNEL): 
	* unix_io.c (unix_open, unix_close, unix_set_blksize, unix_read_blk,
		unix_write_blk, unix_flush): Add magic number checking
		both for io_channel structure and unix_private_data
		structure.

	* openfs.c (ext2fs_open): Add check for io_manager structure's
		magic number.

	* rw_bitmaps.c (ext2fs_write_inode_bitmap, ext2fs_write_block_bitmap,
		ext2fs_read_inode_bitmap, ext2fs_read_block_bitmap,
		ext2fs_read_bitmaps, ext2fs_write_bitmaps): 
	* read_bb.c (ext2fs_read_bb_inode): 
	* read_bb_file.c (ext2fs_read_bb_FILE): 
	* newdir.c (ext2fs_new_dir_block): 
	* namei.c (ext2fs_dir_iterate, ext2fs_lookup, ext2fs_namei): 
	* link.c (ext2fs_link, ext2fs_unlink): 
	* inode.c (ext2fs_open_inode_scan, ext2fs_read_inode,
		ext2fs_write_inode, ext2fs_get_blocks, 
		ext2fs_check_directory): 
	* get_pathname.c (ext2fs_get_pathname): 
	* expanddir.c (ext2fs_expand_dir): 
	* block.c (ext2fs_block_iterate): 
	* bitmaps.c (ext2fs_allocate_inode_bitmap, 
		ext2fs_allocate_block_bitmap): 
	* bb_inode.c (ext2fs_update_bb_inode): 
	* alloc.c (ext2fs_new_inode,ext2fs_new_block,ext2fs_get_free_blocks): 
	* check_desc.c (ext2fs_check_desc): 
	* closefs.c (ext2fs_close, ext2fs_flush): 
	* freefs.c (ext2fs_free): Add check for ext2_filsys magic number.

	* Makefile:
	* ext2fs.h:
	* openfs.c:
	* check_desc.c (ext2fs_check_desc): Move ext2fs_check_desc from
	openfs.c into its own file.

	* ext2fs.h (EXT2_CHECK_MAGIC): Added macro for checking for
	structure magic numbers.

	* closefs.c (ext2fs_flush): Folded in Remy Card's changes to clear
	the EXT2_VALID_FS flag in the backup superblock blocks, so that if
	someone uses the -b option to specify the use of the backup
	superblock --- this usually means that the main superblock is
	toast.  :-)

	* ext2fs.h: 
	* ext2_err.et (EXT2_ET_REV_TOO_HIGH): 
	* openfs.c (ext2fs_open): Folded in Remy Card's changes to add a
	revision level to the superblock.

Sun Aug 21 00:50:08 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* ext2fs.h:
	* bitmaps.c:
	* bitops.c
	* bitops.h:
	* openfs.c:
	* initialize.c: Completely revamped the inode and block bitmap
	structures, so that they can be better chance of being extensible
	in a shared library.  They are now their own type, instead of
	being a char *.  Also, the function signatures of
	ext2fs_test_block_bitmap, ext2fs_mark_block_bitmap,
	ext2fs_unmark_block_bitmap, ext2fs_test_inode_bitmap,
	ext2fs_mark_inode_bitmap, and ext2fs_unmark_inode_bitmap were
	changed to eliminate the ext2_filsys argument, since it is no
	longer necessary.

Wed Aug 17 21:46:44 1994  Remy Card  (card@bbj)

	* unix_io.c (unix_read_blk and unix_write_blk): use the llseek
	system call if available.

	* llseek.c: new file.  This is the stub calling the llseek system
	call which allows supports for 2GB+ file systems.

	* initialize.c (ext2fs_initialize): Ext2fs_initialize now stores
	the creator operating system.

Wed Aug 17 10:03:24 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* initialize.c (ext2fs_initialize): Ext2fs_initialize now sets up
	the group descriptor statistics in addition to everything else.
	This relieves mke2fs of the responsibility of doing it.

	* bitops.c, bitops.h: Add assembly inline functions for the 68000.
	Added a new #define, _EXT2_HAVE_ASM_BITOPS_ to control whether or
	not the generic C function equivalents should be included or not.

	* openfs.c (ext2fs_open): If a superblock is specified, then use
	the backup group descriptors that go along with this superblock,
	instead of using the primary group descriptors.  This allows
	e2fsck to recover filesystems where the primary group descriptors
	have been trashed.


