2000-10-24    <tytso@snap.thunk.org>

	* llseek.c: Add #ifdef's for IA64 (it's a 64-bit platform, so we
		don't need to use llseek).

2000-10-24    <tytso@valinux.com>

	* Makefile.in, ext2fs.h, jfs_dat.h, mkjournal.c: Add functions for
		creating an ext3 journal on a filesystem.

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

	* ext2_err.et.in (EXT2_JOURNAL_NOT_BLOCK): Add new error code.

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

	* unix_io.c: Make massive changes to support a multiple block
		writethrough cacheing.

	* ext2_io.h: Added flags field to the io_channel structure.

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

	* finddev.c, ext2fs.h, Makefile.in: Add new file, finddev.c, which
		provides the function ext2fs_find_block_device().  This
		function returns the pathname to a block device, given its
		device number.

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.


