[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
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.
 
+The test suite requires the tool xxd (available as part of the vim
+distribution).
+
 
 ### 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.
 
 
+### 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