[VFATLIB] Addendum to 469289e
authorPierre Schweitzer <pierre@reactos.org>
Mon, 28 May 2018 21:38:00 +0000 (23:38 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Mon, 28 May 2018 21:38:00 +0000 (23:38 +0200)
sdk/lib/fslib/vfatlib/check/ChangeLog
sdk/lib/fslib/vfatlib/check/README

index f6a1e3d..9e0665a 100644 (file)
+commit cad2c17
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Jan 23 03:10:56 2017 +0100
+
+    fatlabel: Make sure printf style patterns in label are not expanded
+    
+    Writing a label to an unlabeled filesystem involves creating a root
+    directory entry to contain the label. For this, the
+    alloc_rootdir_entry() function used for creating new directory nodes for
+    recovered orphan cluster chains is reused. However, this expects the
+    filename to be a printf style pattern to generate a unique name.
+    
+    If the filesystem is unlabeled and the new label contains a printf
+    specifier other than %d or similar, the attempted expansion of the
+    pattern might crash fatlabel.
+    
+    Change alloc_rootdir_entry() to take an additional argument gen_name and
+    only expand the name if its value is true.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 77371e2
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Nov 4 13:10:58 2016 +0100
+
+    testsuite: Add missing fsck test files to dist_check_DATA
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit d6df1d4
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Thu Nov 3 20:03:25 2016 +0100
+
+    testsuite: Test for bad characters in file names
+    
+    The FAT16 test image contains four files with three errors. One has a
+    space in the name, one a space in the extension and one contains '>' in
+    the name.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 307966c
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sun Sep 18 00:11:43 2016 +0200
+
+    fsck: Fix reporting of length to truncate with shared clusters
+    
+    When files share clusters and one of the two files has been selected to
+    truncate fsck reports which file has been selected and the length to
+    which it will be truncated. All code paths erronously printed the length
+    of the file that was not going to be truncated, leading to possible user
+    confusion.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit b33424e
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sat Sep 17 23:34:07 2016 +0200
+
+    testsuite: Test for files sharing clusters
+    
+    The FAT32 test image contains three files. One shares a cluster with the
+    root directory and the other two share clusters among themselves.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit db5ec04
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sat Sep 17 22:41:07 2016 +0200
+
+    testsuite: Run fsck in test-mkfs
+    
+    Now the test-mkfs script also runs fsck on the created image to test its
+    basic operation. The test fails if fsck reports seeing an error.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 4ac17ae
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sat Sep 17 22:25:06 2016 +0200
+
+    Fix FAT32 FSInfo signature checking
+    
+    In commit 7444694 the definition of struct info_sector was corrected to
+    match the FSInfo sector specification. The initialization was adapted,
+    but other places were missed. All runs of fsck would then incorrectly
+    report a signature error on the FSInfo sector.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit e883d07
+Author: Nico Roeser <nico@n1c0.de>
+Date:   Fri Sep 16 20:05:08 2016 +0200
+
+    mkfs: Bring back ability to set sector size.
+    
+    This had accidently been broken when the code was overhauled, resulting
+    in unconditionally setting the sector size when devinfo detected it.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 4ef83db
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Sep 16 03:32:12 2016 +0200
+
+    Request minimum automake version 1.11 and add workaround for <1.13
+    
+    Before automake 1.13, parallel-tests wasn't the default set it
+    explicitly in the automake options list. The parallel test harness was
+    introduced in 1.11 therefore that is the minimum now.
+    
+    However, the AM_TESTS_ENVIRONMENT variable was only starting to work in
+    1.13, so there is now a version check and a conditional assignment to
+    TESTS_ENVIRONMENT (which should be for user setting only) in case
+    automake is 1.11 or 1.12.
+    
+    Without it, the fact of xxd being found is not passed to the test
+    scripts which then skip all tests due to perceived lack of xxd.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 6a8c8b7
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Sep 16 01:45:17 2016 +0200
+
+    Add missing autoreconf step to Travis CI configuration
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 54f7aef
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Sep 16 01:39:08 2016 +0200
+
+    Add configuration for the Travis CI build service
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 5421752
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Sep 14 20:37:57 2016 +0200
+
+    Check and fix printf style arguments to die() and pdie()
+    
+    Add the "format" gcc style attribute to the declarations of die() and
+    pdie() so that the compiler knows how to check their arguments for
+    correctness.
+    
+    Fix all problematic calls detected by this.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 83e5ec5
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Sep 14 03:38:08 2016 +0200
+
+    Make some implicit integer conversions safer
+    
+    Coverity reports a few places where signed or short integers are
+    promoted to int and then extended to long which might cause unintended
+    sign extension. Given the context (being sector sizes and similar) the
+    values should never actually reach unsafe values, but this patch cleans
+    it up anyway.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit ff5e718
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Tue Sep 13 20:25:34 2016 +0200
+
+    mkfs: Remove redundant unreachable warning message
+    
+    At some point the check for too many clusters for user requested FAT16
+    was moved a few lines above. The original location can only be reached
+    when the cluster count is too low for FAT16 which means the too many
+    clusters message can not be triggered there.
+    
+    Found through the dead code detection of Coverity Scan.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit e359a33
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Tue Sep 13 20:12:21 2016 +0200
+
+    Fix octal character parsing in file_cvt()
+    
+    Apparently the octal code parsing got rewritten into a loop at some
+    point while the rest of the code was not removed. It was impossible to
+    specify an octal character code without the function returning an error.
+    
+    This affected the -u and -d options for fsck.
+    
+    Found through the dead code detection of Coverity Scan.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit ccd0a9d
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Sep 12 20:21:53 2016 +0200
+
+    testsuite: Test for circular cluster chain
+    
+    The test image contains a file four clusters in length where the third
+    cluster has been modified to point back to the second cluster.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit fab40f8
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Sep 12 19:51:10 2016 +0200
+
+    Fix truncation logic in circular chain check
+    
+    When scanning for circular chains, the first FAT entry that appeared a
+    second time in a chain should cause the previous cluster to be the
+    termination of the chain.
+    
+    To that end, test_file() keeps variables to point to the previous
+    cluster and the current number of clusters. When the -t option is given,
+    all clusters are checked to be readable and skipped (variables not
+    updates) in test_file() when they are not.
+    
+    The problem was that the variables were updated only when the read check
+    succeeded. If the -t option is not given, that check does not happen and
+    the variables keep their initial value. The circular chain fix would
+    then always truncate to zero length and fail to update the free cluster
+    count, requiring a second fsck run.
+    
+    Fix by updating these variables unconditionally when -t option is not
+    given.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 8394ceb
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Sep 12 14:39:11 2016 +0200
+
+    testsuite: Test for too long cluster chain
+    
+    The test image contains a file marked as 7 bytes in length (just a small
+    part of 1 cluster) in the directory entry that has 2 clusters assigned
+    to it in the FAT.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 7444694
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Sep 7 21:09:41 2016 +0200
+
+    Fix definition and initialization of fsinfo sector
+    
+    Change the definition of the fsinfo struct to be more in line with the
+    official definition, in particular make the trailing signature field 32
+    bit instead of 16 bit. During initialization in init_fsinfo(), first
+    clear the whole struct to zero before setting fields, to make sure
+    reserved fields are zeroed.
+    
+    Fixes #33.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit f78cb68
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Sep 7 20:45:29 2016 +0200
+
+    Add fsck testsuite
+    
+    Add the framework for a fsck testsuite and a few tests, including a test
+    for the yet unimplemented check for misordered dot/dotdot directory
+    entries.
+    
+    The test driver runs fsck twice on a given image and fails the test if
+    the first run does not detect an error or the second run still detects
+    an error.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 7667295
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Tue May 31 03:32:42 2016 +0200
+
+    Add testsuite foundations
+    
+    Add testsuite on the basis of the automake framework. As a start, three
+    tests for basic mkfs functionality compare mkfs generated images against
+    references images.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit f881195
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Sep 7 03:48:16 2016 +0200
+
+    Append +git to version number in configure.ac
+    
+    Don't let dosfstools compiled from git with additional commits show the
+    exact release version number.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 8788615
+Author: Álvaro Fernández Rojas <noltari@gmail.com>
+Date:   Thu Jun 30 08:43:50 2016 +0200
+
+    Add config.guess and config.sub to gitignore
+    
+    Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 39ab842
+Author: Álvaro Fernández Rojas <noltari@gmail.com>
+Date:   Thu Jun 30 08:41:51 2016 +0200
+
+    Use autoconf to look for OS X endian include.
+    
+    Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 69ac2b0
+Author: Alessio Sergi <al3hex@gmail.com>
+Date:   Fri May 6 18:18:18 2016 +0200
+
+    src/device_info.c: Fix undefined PATH_MAX under musl
+    
+    In musl libc, PATH_MAX is defined in <limits.h>.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 744db84
+Author: Lars Wendler <polynomial-c@gentoo.org>
+Date:   Tue May 10 09:47:57 2016 +0200
+
+    Don't link to udev via LDFLAGS. There's LDADD for such a task.
+    
+    See also:
+    https://www.gnu.org/software/automake/manual/html_node/Linking.html
+    
+    Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 1e76e57
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed May 11 03:44:58 2016 +0200
+
+    mkfs: Default to 64/32 heads/sectors for targets smaller than 512 MB
+    
+    This may put defaults in certain use cases a little bit more in line
+    with the old defaults in versions up to 3.0.28. It has mostly aesthetic
+    value in most cases.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 786e66e (tag: v4.0)
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri May 6 03:19:07 2016 +0200
+
+    Releasing version 4.0.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit a79ff90
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri May 6 02:34:42 2016 +0200
+
+    src/Makefile.am: Fix CPPFLAGS for VPATH builds
+    
+    The -I flag to add the blkdev subdir to the include search path is now
+    relative to $(srcdir) to allow VPATH builds to work. Additionally move
+    the -I flag from the mkfs_fat and testdevinfo CFLAGS to CPPFLAGS where
+    it actually belongs.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit e8eff14
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Apr 27 21:38:37 2016 +0200
+
+    read_boot(): Handle excessive FAT size specifications
+    
+    The variable used for storing the FAT size (in bytes) was an unsigned
+    int. Since the size in sectors read from the BPB was not sufficiently
+    checked, this could end up being zero after multiplying it with the
+    sector size while some offsets still stayed excessive. Ultimately it
+    would cause segfaults when accessing FAT entries for which no memory
+    was allocated.
+    
+    Make it more robust by changing the types used to store FAT size to
+    off_t and abort if there is no room for data clusters. Additionally
+    check that FAT size is not specified as zero.
+    
+    Fixes #25 and fixes #26.
+    
+    Reported-by: Hanno Böck
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 016800e
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Apr 27 14:16:53 2016 +0200
+
+    Use variable total_fat_entries in read_boot() for readability
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit a6478d8
+Author: Álvaro Fernández Rojas <noltari@gmail.com>
+Date:   Fri Apr 8 12:20:46 2016 +0200
+
+    Add missing iconv library for OS X
+    
+    Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit ce67dc6
+Author: Álvaro Fernández Rojas <noltari@gmail.com>
+Date:   Fri Apr 8 12:20:27 2016 +0200
+
+    Add endian support for OS X
+    
+    Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 08f3869
+Author: Joel Holdsworth <joel.holdsworth@vcatechnology.com>
+Date:   Thu Mar 10 00:53:07 2016 +0000
+
+    Configure option to disable building with libudev
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit ed4e47b
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Feb 22 03:47:14 2016 +0100
+
+    Remove use of PATH_MAX in path_name()
+    
+    The length of a file path on the checked filesystem has no relation to
+    the maximum path length of the system fsck is running on. So replace it
+    with a constant of our own.
+    
+    As a bonus this will not fail compilation on a system without PATH_MAX.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit b1a38ab
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 17 21:04:35 2016 +0100
+
+    Add preliminary entry for release 4.0 to NEWS
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 4ad3e9e
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 17 21:02:06 2016 +0100
+
+    Adjust ridiculous source indentation in io.c
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit b96acb2
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 17 20:51:53 2016 +0100
+
+    Document ./configure --enable-compat-symlinks in README
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit de39c5c
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 17 15:16:27 2016 +0100
+
+    Add include paths.h in the HAVE_DECL_GETMNTENT case
+    
+    _PATH_MOUNTED is now used for getmntent() in place of MOUNTED because
+    the latter was marked as a deprecated alias in glibc's mntent.h. The
+    mntent.h of musl libc does not include the _PATH_MOUNTED however. Fix
+    this by including paths.h alongside mntent.h
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 86c7acd
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 17 15:06:56 2016 +0100
+
+    man fsck: Document the -c option
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit ef9a73c
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Feb 15 02:10:57 2016 +0100
+
+    Add NEWS file with changes of the last two releases
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit bda6551
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Feb 12 03:56:16 2016 +0100
+
+    Make filesystem mounted check portable
+    
+    A new function is_device_mounted() in device_info.c is now used by
+    check_mount() in mkfs.fat.c. It contains the getmntent() using code
+    used before in check_mount() and now an alternative using getmntinfo()
+    as found on the BSDs.
+    
+    In case neither function is available, is_device_mounted() defaults to
+    reporting that the device isn't mounted.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 4b8c9cc
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Feb 12 01:57:33 2016 +0100
+
+    Make use of endian.h portable to BSD
+    
+    The endian.h found on Linux and the BSDs appear to be compatible, but
+    they are found in different locations. Add tests in configure.ac and a
+    new endian_compat.h file that has the logic to include the correct
+    files.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit d7665f2
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 10 21:30:06 2016 +0100
+
+    Fix format string in check_file() (%lu → %llu)
+    
+    The cluster chain length printing needs a 64 bit calculation, so we can
+    just use unsigned long long instead of uint64_t and use the format
+    string %llu.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 6225e59
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Feb 5 14:39:00 2016 +0100
+
+    blkdev.c: Prevent unused parameter warnings in fallback code
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 34cdded
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Feb 5 14:36:14 2016 +0100
+
+    blkdev_get_size(): Remove unused variable ch
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 5571d29
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 10 03:22:19 2016 +0100
+
+    Reinstate alignment of FAT32 structures to cluster size
+    
+    This reverts commits 17c956cb9 and d63e0d627 where the alignment was
+    removed because it created problems with a device that refused to read
+    the aligned filesystem. The option -a is already provided to disable
+    alignment in order to handle such cases.
+    
+    This change brings it back in line with FAT12/16 where alignment wasn't
+    disabled and brings consistency with the current command line options,
+    where only the option to disable alignment exists but no opposite option
+    to enable it.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 2c71ace
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 3 03:38:33 2016 +0100
+
+    Makefile.am: Add historic documentation to distribution
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit bcbae63
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 3 02:38:24 2016 +0100
+
+    src/Makefile.am: Add forgotten msdos_fs.h to mkfs_fat_SOURCES
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 19d1a13
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 3 02:34:51 2016 +0100
+
+    Remove sys/ioctl.h and linux/fd.h include from io.c
+    
+    These weren't used anymore and the linux/fd.h include would
+    gratuitously cause compilation to fail on non-Linux environments.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit f691660
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Feb 3 02:31:00 2016 +0100
+
+    Reinstate some #include <sys/types.h>
+    
+    These shouldn't have been removed in commit 245d0cce5. Put them back for
+    correctness even though the definitions were pulled in implicitly.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 51afd41
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Jan 27 21:38:29 2016 +0100
+
+    src/Makefile.am: Put all header files in appropriate _SOURCES variables
+    
+    With the headers missing the dist targets of the automake generated
+    Makefiles would not include them and make the resulting dist
+    unbuildable.
+    
+    Also combine sources collections into common variables for
+    deduplication.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit bf6f142
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Jan 27 15:28:42 2016 +0100
+
+    mkfs man: Note that sector sizes > 4096 are non-standard
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit ea96c32
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Jan 25 21:30:23 2016 +0100
+
+    mkfs: Improve parsing of bad blocks file
+    
+    The bad blocks file that can be given to mkfs via the -l option had a
+    very simplistic design. It failed to notice it was parsing an empty
+    line and would report errors for that.
+    
+    Replace it with a more robust version that ignores empty lines as well
+    as leading and trailing white space. Additionally it produces meaningful
+    error messages.
+    
+    GitHub: Fixes #17
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit dfb5bea
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Jan 25 02:47:12 2016 +0100
+
+    mkfs: Limit filesystem size on targets that are too large
+    
+    For FAT filesystems, the number of sectors has to fit into a 32 bit
+    variable. Previously this was not checked possibly causing invalid
+    filesystems to be generated.
+    
+    Now there is a check for that case which will limit the number of
+    sectors if needed and print a warning that disk space will be left
+    unused in that case.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit fc0343f
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Jan 22 21:29:20 2016 +0100
+
+    mkfs: Improved bounds checking in mark_FAT_sector()/mark_FAT_cluster()
+    
+    In mark_FAT_sector() the sector number itself is now checked against
+    limits instead of the computed cluster number. Even with sector number
+    before the start of the data area, the cluster number may be valid for
+    the first cluster due to dividing by the cluster size.
+    
+    Both functions now check for upper limits and should prevent writing
+    past the valid end of the FAT.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 9211c8a
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Jan 15 02:17:16 2016 +0100
+
+    mkfs: Fix offset error in FAT12/16 bad cluster marking
+    
+    The root directory wasn't factored in to the calculation of the data
+    area start sector. On FAT32 the root directory is in the data area, but
+    for FAT12 and FAT16 it is a reserved space before the start of the data
+    area.
+    
+    On FAT12 and FAT16, this resulted in the wrong clusters being marked
+    during bad blocks mapping, whether from check_blocks() or from reading
+    the user supplied bad blocks file.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 0627a62
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Jan 15 01:59:59 2016 +0100
+
+    mkfs: Fix off-by-2 error in bad cluster marking
+    
+    mark_FAT_sector(), which has the mark_sector_bad() macro as its sole
+    user, computed the cluster number corresponding to the sector by taking
+    its offset from the first data sector and dividing by sectors per
+    cluster.
+    
+    What it missed was that the first data cluster is number 2 and not 0.
+    This meant all marks were off by 2 and when the first two clusters are
+    supposed to be marked, it would overwrite the reserved cluster values
+    and create an invalid filesystem.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 2dca9aa
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Thu Jan 14 14:43:00 2016 +0100
+
+    .gitignore: Add .dirstamp
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 6a966fb
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Thu Jan 14 14:38:53 2016 +0100
+
+    mkfs: Reword non-standard sector size warning
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit bebc9ac
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Dec 30 15:10:35 2015 +0100
+
+    Clean up includes in mkfs.fat.c
+    
+    Moving the device probing out into device_info.c removed the need for a
+    number of includes in mkfs.fat.c. Remove them and add a define for
+    BLOCK_SIZE, which was the only thing used from linux/fs.h.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 12a1d46
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sun Nov 29 01:59:10 2015 +0100
+
+    Don't use pointer to first member when more of the struct gets copied
+    
+    Where a fs_write() of "first 13 bytes of directory entry" is intended,
+    actually use pointer to directory entry structure instead of the 11
+    byte name field at the beginning.
+    
+    This does not change how the code works, it is just a clean up.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit d38bd2d
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sun Nov 29 00:44:48 2015 +0100
+
+    Remove name/extension split in directory entry structures
+    
+    Both the DIR_ENT structure in fsck.fat.h and the msdos_dir_entry in
+    msdos_fs.h - these represent the on disk format of directory entries -
+    had the name field split into name[8] followed by ext[3].
+    
+    By far the most operations on name are on the full name including
+    extension and they treated the name field as an 11 byte array. This is
+    an array overflow that worked because the structs have the attribute
+    packed and the extension field is following right after.
+    
+    Nevertheless, this is not clean C and the merging of both fields
+    actually simplified the code in a few places.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 0847e4c
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Nov 27 21:29:49 2015 +0100
+
+    Free allocated strings after use
+    
+    There are multiple calls to cnv_unicode() in lfn.c which returns an
+    allocated string. Most had the appropriate free() calls after printing
+    the strings. Add the missing two calls where memory was leaked.
+    
+    Found by Coverity.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 1b7d91e
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Nov 27 03:34:51 2015 +0100
+
+    Add test for and include linux/hdreg.h in blkdev.c
+    
+    Before, blkdev did not include it and depended on its own fallback
+    definition of the ioctl and struct hd_geometry.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 5024372
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Nov 27 03:28:14 2015 +0100
+
+    Add FDGETPRM attempt to blkdev_get_geometry()
+    
+    If HDIO_GETGEO isn't available or has failed, try FDGETPRM. This should
+    get the geometry from floppy drivers where HDIO_GETGEO isn't supported.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 4a146d7
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Nov 27 03:25:55 2015 +0100
+
+    Add blkdev_get_start() for getting partition start offset
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 254f8ab
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Thu Nov 26 23:33:02 2015 +0100
+
+    Remove use of libblkid again
+    
+    It appears libblkid is not as widely available as presumed, since some
+    platforms only have the original libblkid included in e2fsprogs which
+    lacks the needed functionality. This commit removes the requirement and
+    use of libblkid.
+    
+    As a replacement, blkdev.c from util-linux is included, which offers the
+    required basic functionality in a portable way.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit c9fb33c
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Oct 21 21:32:30 2015 +0200
+
+    Use just device size not major number in Atari mode
+    
+    In Atari mode, read_boot() in boot.c used the device major number to
+    determine whether to use FAT12. It would always use FAT12 for a floppy,
+    otherwise only if it is a RAM disk or loopback device and has a size
+    corresponding to standard floppy formats.
+    
+    Since this check was already broken for a long time (another place that
+    assumed 8 bit major numbers) and there is no real point to make the
+    distinction based on device, this commit reduces the check to just
+    compare against standard floppy sizes.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 64486ad
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Oct 21 00:18:22 2015 +0200
+
+    Remove loff_t and llseek()
+    
+    There appear to have been multiple conversions to 64 bit file offsets on
+    32 bit architectures in dosfstools over the years, but today with the
+    proper setup off_t is 64 bits and simple lseek() can be used. The
+    AC_SYS_LARGEFILE macro in configure.ac does what is required to make
+    that happen.
+    
+    Given this, convert all uses of loff_t to off_t, remove llseek()
+    definitions and change llseek() calls to plain lseek().
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit e03a5f4
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Oct 16 21:47:04 2015 +0200
+
+    Remove DJGPP support
+    
+    These macros have been added back when dosfstools was around version 2.
+    It is difficult to say whether these are still working correctly or
+    whether they are in use at all. FreeDOS appears to still show version
+    2.11 of dosfstools in their software directory.
+    
+    Supporting actual MS-DOS or compatible may need more work in the
+    current state of things and this DJGPP support can be removed until
+    then.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 5b9a88d
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Thu Oct 8 16:17:22 2015 +0200
+
+    mkfs.fat: Complete overhaul of device probing
+    
+    The device probing in mkfs.fat is used to get device parameters where
+    needed and also to decide whether to refuse overwriting a device due to
+    possible user error. This code has suffered severe bitrot and is highly
+    Linux specific. Highlights include using hardcoded major/minor device
+    numbers to classify a device, and using 8 bits major/minor numbers that
+    have become obsolete a long time ago and thus often misidentifying a
+    device.
+    
+    The overhauled implementation is now in src/device_info.c and makes use
+    of libudev (optional, recommended) and libblkid (required) to probe the
+    device and where Linux ioctls are required it provides fallbacks and
+    does not attempt to call these on non-Linux systems. The FAT parameter
+    selection has been unified and simplified in the process.
+    
+    A new executable testdevinfo has been added that gets built but not
+    automatically installed. It takes one file name, uses the same probing
+    as mkfs.fat would with verbose messages enabled and displays the
+    results.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 53eddfc
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sat Sep 12 02:54:33 2015 +0200
+
+    Die on out of range cluster values in set_fat()/get_fat()
+    
+    To prevent bugs caused by FAT corruption inside fsck to go unnoticed,
+    add a check against out of range requested cluster values in get_fat()
+    and against out of range cluster to change and new cluster value in
+    set_fat().
+    
+    When an invalid cluster value is detected, these functions now die()
+    with an "internal error" message.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 456767b
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Sep 14 00:33:49 2015 +0200
+
+    configure.ac: Use AS_HELP_STRING to format option help
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 3cfb479
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Sep 14 00:30:40 2015 +0200
+
+    version.h: Use @configure_input@ autoconf variable in boilerplate
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 41ef834
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Mon Sep 14 00:29:27 2015 +0200
+
+    .gitignore: Add TAGS in addition to tags
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit bdc3d2a
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Sep 11 20:28:12 2015 +0200
+
+    Rename clusters field in DOS_FS struct
+    
+    Rename it to data_clusters to prevent mistaking the clusters field of
+    the DOS_FS struct as the total number of FAT entries instead of the
+    number of data clusters (two less than the number of entries).
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 0790812
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Sep 11 19:47:29 2015 +0200
+
+    set_fat(): Fix off-by-2 error leading to corruption in FAT12
+    
+    In FAT12 two 12 bit entries are combined to a 24 bit value (three
+    bytes). Therefore, when an even numbered FAT entry is set in FAT12, it
+    must be be combined with the following entry. To prevent accessing
+    beyond the end of the FAT array, it must be checked that the cluster is
+    not the last one.
+    
+    Previously, the check tested that the requested cluster was equal to
+    fs->clusters - 1. However, fs->clusters is the number of data clusters
+    not including the two reserved FAT entries at the start so the test
+    triggered two clusters early.
+    
+    If the third to last entry was written on a FAT12 filesystem with an
+    odd number of clusters, the second to last entry would be corrupted.
+    This corruption may also lead to invalid memory accesses when the
+    corrupted entry becomes out of bounds and is used later.
+    
+    Change the test to fs->clusters + 1 to fix.
+    
+    Reported-by: Hanno Böck
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 39ce90f
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Fri Sep 11 19:34:10 2015 +0200
+
+    set_fat(): Move FAT12 next cluster check up
+    
+    In FAT12 two 12 bit entries are combined to a 24 bit value (three
+    bytes). Therefore, when an even numbered FAT entry is set in FAT12, it
+    must be be combined with the following entry. To prevent accessing
+    beyond the end of the FAT array, it must be checked that the cluster is
+    not the last one.
+    
+    This check was broken in ff1b24e9 (first included in 3.0.3) as the
+    lookup was done unconditionally and the check influenced only using the
+    looked up value.
+    
+    Move the check up to fix.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 2aad1c8
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Tue Sep 8 03:58:29 2015 +0200
+
+    Prevent out of bound array read in date_dos2unix()
+    
+    The function date_dos2unix() is called during fsck while showing
+    information about duplicate file names. In case the date field of a
+    directory entry contains the invalid value 0 for the month,
+    date_dos2unix would read index -1 of the day_n array.
+    
+    Add a check to prevent that and also make the day_n array const on this
+    occasion.
+    
+    Reported-by: Hanno Böck
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 3b95786
+Author: Yann E. MORIN <yann.morin.1998@free.fr>
+Date:   Sun Aug 16 15:55:43 2015 +0200
+
+    mkfs.fat: fix incorrect int type
+    
+    u_int32_t is not a stanard type, while uint32_t is. This fixes builds
+    with the musl C library, which only defines so-called "clean" headers;
+    build failures are like (back-quotes and elision manually added for
+    readability):
+    
+        http://autobuild.buildroot.org/results/a09/a0923d7f6d4dbae02eba4c5024bbdae3a52aa85a/build-end.log
+    
+        /home/peko/autobuild/instance-1/output/host/usr/bin/x86_64-linux-gcc -D_LARGEFILE_SOURCE \
+            -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64   -Os  -D_GNU_SOURCE -D_LARGEFILE_SOURCE \
+            -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -c -o mkfs.fat.o src/mkfs.fat.c
+        src/mkfs.fat.c: In function 'main':
+        src/mkfs.fat.c:1415:18: error: 'u_int32_t' undeclared (first use in this function)
+             volume_id = (u_int32_t) ((create_timeval.tv_sec << 20) | create_timeval.tv_usec); [...]
+                          ^
+        src/mkfs.fat.c:1415:18: note: each undeclared identifier is reported only once for each
+        function it appears in
+    
+    Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 2b1c4d1
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Jun 3 03:33:10 2015 +0200
+
+    Add README.md, remove Markdown formatting from README
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit b720acc
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Wed Jun 3 03:27:24 2015 +0200
+
+    Add simple README in Markdown format
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 2b255e6
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Tue Jun 2 18:25:06 2015 +0200
+
+    Configure option for legacy names symlinks
+    
+    The symlinks from the old names (mkdosfs, dosfsck, etc.) are now only
+    created on "make install" when the --enable-compat-symlinks option was
+    given to configure.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 0643db7
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sun May 31 02:40:19 2015 +0200
+
+    Convert build system to autoconf/automake
+    
+    In preparation for fixing the horribly outdated and broken device
+    checking - which will likely involve using additional libraries like
+    libblkid - as well as making this package portable to other operating
+    systems, the build system is now the tried and true autoconf/automake
+    combination which should make both goals a little more straightforward.
+    
+    The release version number and date are now in configure.ac and
+    substituted by configure where they are needed. Now it is no longer
+    necessary to change the number in multiple places for a release and the
+    man pages get the number substituted directly into them, making the
+    update-version.sh script and the VERSION file obsolete.
+    
+    The English man pages are moved back up one directory to mark their
+    status as the master copy for all translations. At the moment the po4a
+    translation infrastructure is defunct since it isn't integrated into
+    the automake environment yet. So far it hasn't been used, so that is
+    not an actual regression.
+    
+    The date in the man pages is not automatically updated anymore. This is
+    as it should be, since the date is supposed to signify the time of the
+    last nontrivial change and not the release date of the software.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
+commit 85022fe (tag: v3.0.28)
+Author: Andreas Bombe <aeb@debian.org>
+Date:   Sat May 16 02:56:17 2015 +0200
+
+    Releasing version 3.0.28.
+    
+    Signed-off-by: Andreas Bombe <aeb@debian.org>
+
 commit ad1342e
 Author: Andreas Bombe <aeb@debian.org>
 Date:   Sat May 16 02:10:18 2015 +0200
 commit ad1342e
 Author: Andreas Bombe <aeb@debian.org>
 Date:   Sat May 16 02:10:18 2015 +0200
index 8fe8249..8ce3d88 100644 (file)
@@ -9,6 +9,9 @@ dosfstools recommends libudev. It is used in mkfs.fat to collect additional
 information about the device to format in order to refuse potentially unsafe
 operations without additional confirmation.
 
 information about the device to format in order to refuse potentially unsafe
 operations without additional confirmation.
 
+The test suite requires the tool xxd (available as part of the vim
+distribution).
+
 
 ### Installing
 
 
 ### Installing
 
@@ -28,6 +31,17 @@ installation. These are dosfsck, fsck.msdos and fsck.vfat for fsck.fat, mkdosfs,
 mkfs.msdos and mkfs.vfat for mkfs.fat and dosfslabel for fatlabel.
 
 
 mkfs.msdos and mkfs.vfat for mkfs.fat and dosfslabel for fatlabel.
 
 
+### Running the test suite
+
+The test suite can be run with "make check" after configuring. Note that if
+xxd isn't available, all tests will be skipped and nothing actually tested.
+
+During the tests temporary files of multiple GB in size will be created, but the
+actual data content is not more than a few MB. The operating system and the
+filesystem the tests are executed on should support sparse files, otherwise the
+tests will be resource intensive.
+
+
 ### Building from the VCS repository
 
 If you are working directly from a git clone of the official dosfstools
 ### Building from the VCS repository
 
 If you are working directly from a git clone of the official dosfstools