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

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


