E2fsprogs 1.43.1 (June 8, 2016)
===============================

Fixed e2fsck so that it would correctly update the project quota usage
when deleting a corrupted and inode, and fixed mke2fs so it wouldn't
dereference memory beyond the small inode structure (which was wrong,
but worked mostly by accident unless hardening or some security malloc
was in use).

Fixed a large number of FreeBSD portability problems.  (To build on
FreeBSD, however, we still need to use GNU Make and redirect dd to use
GNU dd.)

The configure script now supports --enable-hardening, which enables
stack protection, fortify, read-only relocation tables, immediate
dynamic symbol binding, and text segment ASLR (if the kernel has
userspace ASLR support enabled) by enabling position independent
executable code.  (Distributions who want to do their own special
thing can set CFLAGS, CFLAGS_SHLIB, CLFAGS_STLIB, LDFLAGS,
LDFLAGS_SHLIB and LDFLAGS_STATIC as appropriate.)

The configure script now supports --disable-tdb since on 64-bit
systems, it's much faster to just enable additional swap space.  The
scratch_files feature in e2fsck.conf is mostly only useful on 32-bit
systems.

Fixed the Direct I/O fallback codepath in the Unix I/O manager so that
read/modify/write worked correctly.  Fortunately in practice (with the
exception of the Undo handler when running on FreeBSD) used this buggy
codepath. so file systems weren't getting corrupted.

Mke2fs will now warn if the user provides a label which is too long.
(Addresses Debian Bug: #791630)

Debugfs's rdump command now works correctly when dumping the root
directory of a file system.  (Addresses Debian Bug: #766125)

Fixed a bug in debugfs so it would correctly calculate a block group's
checksum field field on 64-bit systems.

E2fsck now has a much more understandable error message when the
journal superblock is corrupt and the user declines to fix it.
(Addresses Debian Bug: #768162)

Fixed support of extended timestamps on 64-bit systems.

Updated/fixed various man pages.  (Addresses Debian Bugs: #766379,
#761144, #770750, #428361, #766127)

Fixed various Debian Packaging Issues.  (Addresses Debian Bug: #825868)


Programming notes
-----------------

Fixed coverity, sparse, gcc -Wall, and clang warnings/nits.

Fixed Android build makefiles (which was missing a newly added file in
lib/support).

In general, checks on s_creator_os have been removed in favor of
feature flag specific checks; if there is something that can't be
checked via the presence of a feature flag, we will simply check
whether the creator OS is *not* EXT2_OS_HURD which is the one
operating system where there has been extensive abuse of the
s_creator_os flag.

The libmagic library has been suppressed when running the regression
test suite to avoid false test failures caused by differences between
versions of libmagic (and/or the magic number database).

The tests/test_script program now accepts the --failed option, which
will run those tests that had previously failed.

Fixed tests build on those systems which require LDFLAGS to be set.

Fixed the regression test suite so it will properly filter out version
numbers with two components (such as 1.43) from log files before
comparing them with the expected golden output.

