commit eb9111e
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 31 13:26:03 2021 +0100

    Add missing files into distribution tarball

commit 52518ae
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 31 03:03:39 2021 +0100

    mkfs.fat: Read geom_start from sysfs
    
    HDIO_GETGEO which provides start member is not supported for loop block
    devices. Also start member is only unsigned long so it cannot be used for
    bigger disks. So instead read geom_start from sysfs and store it into long
    long type to prevent overflow.

commit ed2062b
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Jan 29 16:40:56 2021 +0100

    Autogenerate release date in manpages

commit fca589b
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Jan 29 16:40:20 2021 +0100

    Update (C) and maintainers

commit c251412
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Jan 29 16:33:41 2021 +0100

    Add TODO comments for checking integer overflow

commit 73003cd
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 19 13:28:45 2019 +0100

    Replace uint64_t type by unsigned long long type

commit c56ef3d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 19 13:22:05 2019 +0100

    Remove useless casting to uint64_t or long long in check_file()
    
    Value of clusters * fs->cluster_size is file size and it always fits into
    32bit value. So use just unsigned int type for it.

commit 2e597d6
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 19 13:20:16 2019 +0100

    Check that file size is not larger than maximal possible size

commit 53d04ff
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 19 13:15:25 2019 +0100

    Change fat_size type from off_t to unsigned int
    
    Value in fat_size is result of multiplication of two 16bit unsigned values,
    therefore it fits into unsigned int.

commit 2f6d8cf
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Jan 29 02:10:58 2021 +0100

    testsuite: Add reference images of fsck result tests
    
    This ensures that fsck does not change its behavior and repair filesystems
    in the same way. Repaired reference images were generated by dosfstools 4.1
    to ensure that they are still same.

commit 5265c64
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Jan 29 02:10:22 2021 +0100

    testsuite: Add fsck tests for fat labels

commit 2260f80
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 3 23:22:42 2021 +0100

    fsck.fat: Check and fix label
    
    Checks the volume label from the root directory entry that is valid and
    matches the label stored in boot sector.
    
    Add new command line option -U which consider lowercase volume label as
    invalid and allows only uppercase labels. By default lowercase volume
    labels are allowed.

commit 77c3de9
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Jan 14 00:58:21 2020 +0100

    Simplify usage of validate_volume_label() function
    
    Use new function dos_string_to_wchar_string() for converting label from DOS
    OEM code page to wchar_t* string. Therefore caller does not have to supply
    label in both DOS OEM encoding and locale independent wchar_t* string.

commit f89b42d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 19 18:54:07 2018 +0200

    Update warning message about lowercase labels
    
    They are working fine on MS-DOS and Windows systems.

commit 5bbae89
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Aug 15 16:35:48 2018 +0200

    charconv: Add functions for converting DOS strings to locale independent wchar_t strings
    
    Use iconv library for it. And as a fallback use internal cp850_table.

commit 3a3c1d3
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Thu Jan 28 10:39:36 2021 +0100

    testsuite: Update mkfs-fat32_2_res_sects.xxd test as it is now not aligned due to -a

commit 289fa53
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 27 02:03:39 2021 +0100

    manpages: End every sentence by a newline

commit 61390f3
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 27 02:01:48 2021 +0100

    mkfs.fat: Do not align number of sectors when -a was specified

commit 7deb97d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 27 02:00:33 2021 +0100

    mkfs.fat: Document that -r and -R specify minimal number (and not exact)

commit 4e06c33
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 27 01:58:38 2021 +0100

    fsck: Move check_dirty_bits() from boot.c to check.c

commit 738ee98
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 17 16:15:41 2021 +0100

    fatlabel: Print warnings on stderr
    
    Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803391

commit e62e52c
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 17 19:45:26 2021 +0100

    fatlabel: Do not call parts of fsck repair procedure
    
    This change adds a new parameter for read_fat() function to indicate a mode
    in which filesystem is doing to be used: Read-only, Read-write or Repair.
    
    fsck.fat uses Repair mode and fatlabel either Read-only or Read-write
    (which depends on fatlabel operation).
    
    fatlabel cannot repair broken FAT filesystem like fsck.fat. So when trying
    to modify FAT label on currupted FAT filesystem rather throw an fatal error
    indicating that running fsck.fat is needed.
    
    When fatlabel was called to just read existing FAT label, first FAT table
    is corrupted and second FAT table is clean then use second FAT table.
    
    This change also ensures that fatlabel does not print fsck/repair messages
    on stdout, which should be used only for printing FAT label.

commit b8c8531
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 17 22:47:18 2021 +0100

    testsuite: Add tests for DOS Clean Shutdown bit

commit 82c2111
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 17 20:20:39 2021 +0100

    testsuite: Add fsck tests with broken first FAT cluster
    
    Extend also test-fsck script to read additional arguments from .args file.

commit 82e9730
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 17 19:34:10 2021 +0100

    fsck.fat: Add code for fixing first FAT cluster
    
    This patch tries to fix infamous fsck.fat error:
    
        Both FATs appear to be corrupt. Giving up.
    
    It just fill again FAT media type and sets other bits to one as it is
    required by FAT specification. Similar thing is doing also Windows chkdsk
    tool.
    
    In the most cases corrupted first FAT cluster is fatal error which
    indicates totally corrupted filesystem impossible to repair. So fixing
    first FAT cluster is not done by fsck.fat automatically and needs to be
    enabled by a new -F option, which forces usage of specified FAT table
    (either clean or corrupted).

commit e579a7d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Nov 17 01:12:52 2018 +0100

    mkfs.fat: Allow to specify disk geometry via new -g option

commit 9443732
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Jan 8 11:49:27 2021 +0100

    testsuite: Add mkfs test for 600MB large 4K disk

commit 3300839
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Oct 14 16:19:51 2018 +0200

    mkfs.fat: Do not show verbose messages not relevant to selected FAT size

commit 43f0c4e
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Aug 17 14:26:30 2018 +0200

    mkfs.fat: Fix text of verbose messages

commit c01f78b
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Aug 14 15:48:50 2018 +0200

    mkfs.fat: Fix limits for number of clusters
    
    According to Microsoft FAT specification (fatgen103.doc) disk with at least
    4085 clusters and less then 65525 clusters is FAT16.
    
    But Microsoft Windows FAT driver fastfat.sys detects disk with less then
    4087 clusters as FAT12. Linux FAT drivers msdos.ko and vfat.ko detect disk
    with 4085 clusters (or more) as FAT16, therefore for compatibility reasons
    with both systems disallow formatting disks to 4085 or 4086 clusters.
    
    So after this change mkfs.fat disallow to create a FAT16 which would be
    misinterpreted as FAT12. Next run of cluster detection algorithm would
    choose higher cluster size which decrease number of clusters.
    
    According to specification, FAT32 is detected by at least 65525 clusters,
    but Microsoft Windows FAT driver fastfat.sys, Linux FAT drivers msdos.ko
    and vfat.ko detect disk as FAT32 when Sectors Per FAT (fat_length) is set
    to zero.

commit 404ead8
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Aug 11 20:34:08 2018 +0200

    mkfs.fat: Fix calculation of FAT32 cluster size on non 512 bytes sector disks
    
    Previous FAT32 calculation worked correctly only for disks with 512 byte
    sectors. New calculation formula is generalized variant of previous one,
    but to be sector size independent.

commit e6d2fc7
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Aug 15 15:11:30 2018 +0200

    mkfs.fat: Fix printing number of sectors
    
    It is unsigned 32bit number therefore use %u format.

commit b29eb5b
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Aug 15 15:15:06 2018 +0200

    mkfs.fat: Align total number of sectors to be multiple of sectors per track
    
    This requirement is needed by DOS systems and also by Linux mtools project.
    Without proper alignment, mtools applications refuse to work on such
    filesystem.

commit 8c81232
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 10 22:29:48 2021 +0100

    testsuite: Add referenceFAT32mbr test data to dist_check_DATA

commit 468aad7
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 10 22:16:49 2021 +0100

    manpages: Escape dot in fsck.fat manpage at the beginning of the line

commit 9069ba0
Author: felix <felix.von.s@posteo.de>
Date:   Mon Apr 2 22:43:46 2018 +0200

    fsck.fat: properly check for valid "." and ".." entries
    
    This change makes fsck.fat check whether "." and ".." entries exist in
    all non-root directories as the two very first. If those entries are
    occupied by some other file, fsck.fat will offer to move them to some
    later slot. "." and ".." entries found in any other slots are treated
    as ordinary bad-shortname entries. The test case for this situation has
    been enabled and verified to perform as expected.
    
    The function drop_file() was also modified so that it does not mark
    dropped file clusters as free. This was necessary because otherwise
    dropping too-late "." and ".." entries would delete their containing
    directory. If deleted entries' clusters are truly no longer used, they
    shall be picked up by a later reclamation stage.
    
    Additionally, subdirs() and check_file() were modified not to check
    unused directory entries.
    
    Additionally-fixed-by: Dave Odell <dmo2118@gmail.com>

commit 512141a
Author: C. Masloch <pushbx@ulukai.org>
Date:   Sat Oct 24 13:53:08 2020 +0200

    fsck.fat: preserve info sector reserved fields
    
    This allows the FSIBOOT stage of lDOS boot32.asm to remain
    in the FSINFO sector even when the info entries are reset.
    
    I reviewed several sources to determine whether we are in the right to
    assume that the reserved 480 bytes used by FSIBOOT should be preserved
    by drivers updating the FSINFO entry fields.
    
    Quoting the document "Microsoft Extensible Firmware Initiative - FAT32
    File System Specification - FAT: General Overview of On-Disk Format -
    Version 1.03, December 6, 2000" on these bytes:
    
    > [Name] FSI_Reserved1
    >
    > [Offset (byte)] 4
    >
    > [Size (bytes)] 480
    >
    > [Description] This field is currently reserved for future expansion.
    > FAT32 format code should always initialize all bytes of this field
    > to 0. Bytes in this field must currently never be used.
    
    This specifically states that "FAT32 format code" should zero-initialise
    this space. It does not specify that a driver should or should not reset
    this space.
    
    The FreeDOS kernel uses a struct [1] that does not include the space
    used by FSIBOOT. Its driver's implementation [2] does preserve the
    FSIBOOT area. I have verified this in dosemu2; if the FreeDOS kernel
    updates the FSINFO sector it preserves this area.
    
    The Linux kernel uses a struct with a "reserved1" member [3] which is
    commented as being "Nothing as far as I can tell". If I am reading the
    source correctly, its driver [4] also preserves this area when updating
    the FSINFO entries.
    
    Testing on MS-DOS version 7.10 (as bundled with MS Windows 98 SE) I
    determined that it also preserves the area when updating the FSINFO entries.
    
    The free software RxDOS/lDOS boot loader for FAT32 that I wrote uses
    this reserved area to store its FSIBOOT stage, essentially an extension
    to the primary boot sector loader. To avoid clashing with Microsoft
    loaders which may use some of the reserved sectors, the large reserved
    area in the FSINFO sector was selected to hold this stage (if sector
    size is <= 512 bytes). If valid, the area starts with a signature [5]
    the first four bytes of which form the letters "FSIB"; the subsequent
    four bytes specify a protocol version. For example, the current
    (non-experimental) version is "FSIBOOT3" [6].
    
    If there is no FSINFO sector or the FSIBOOT signature does not match the
    one expected, then the 'I' error code letter ("i"nvalid FS"I"BOOT) is
    displayed and the loading is aborted [7]. Prior to this patch, if the
    FSINFO entries were invalid (any of the three FSINFO signatures don't
    match) and then fsck.fat was used and instructed to correct this, it
    would reset the space used by FSIBOOT, rendering the image unbootable
    if the lDOS boot32 loader had been installed into the image.
    
    I previously posted a similar patch for mtools to the info-mtools
    mailing list [8]. I was approached to check whether dosfstools behaved
    as expected. I determined that this patch is needed to fix the corner
    case of invalid FSINFO entries with FSIBOOT installed into the sector.
    I also patched the lDOS instsect application [9] so it insures that the
    FSINFO entries are valid while installing FSIBOOT. With either that
    patch to instsect or this patch to dosfstools, FSIBOOT will always be
    preserved when running fsck.fat on a file system.
    
    [1]:
    https://github.com/FDOS/kernel/blob/6e42bb6d7c6dd304f738cf0d7a2db719598f1b9e/hdr/device.h#L325
    [2]:
    https://github.com/FDOS/kernel/blob/6e42bb6d7c6dd304f738cf0d7a2db719598f1b9e/kernel/fattab.c#L116
    [3]:
    https://github.com/torvalds/linux/blob/7cf726a59435301046250c42131554d9ccc566b8/include/uapi/linux/msdos_fs.h#L163
    [4]:
    https://github.com/torvalds/linux/blob/7cf726a59435301046250c42131554d9ccc566b8/fs/fat/misc.c#L60
    [5]: https://hg.ulukai.org/ecm/ldosboot/file/aa15fd7bc58e/boot32.asm#l1164
    [6]: https://hg.ulukai.org/ecm/ldosboot/file/aa15fd7bc58e/boot32.asm#l27
    [7]: https://hg.ulukai.org/ecm/ldosboot/file/aa15fd7bc58e/boot32.asm#l775
    [8]: https://lists.gnu.org/archive/html/info-mtools/2020-10/msg00000.html
    [9]: https://hg.ulukai.org/ecm/instsect/rev/eee5dfaa52f6

commit 201665c
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 16 12:33:32 2020 +0100

    mkfs.fat: Update --help for -h (hidden sectors)

commit 25da96e
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 16 12:22:04 2020 +0100

    mkfs.fat: Relax -D option (BIOS drive number)
    
    Allow to specify also second hard disk (0x81) or second floppy device
    (0x01) as -D option = BIOS drive number.

commit bce0940
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 18:59:54 2019 +0100

    manpages: Update mkfs.fat manpage about FAT32 backup boot sector

commit da36707
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 11:48:32 2019 +0100

    mkfs.fat: Write FAT32 backup info sector after FAT32 backup boot sector
    
    Write it only in the case when location does not conflict with real/primary
    FAT32 info sector and reserved area is big enough.

commit 5b61d9f
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 11:01:15 2019 +0100

    testsuite: Run fsck test step always even if mkfs test step fails
    
    fsck test step can show more details about badly created image by mkfs.

commit 53bfa1f
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 10:56:06 2019 +0100

    testsuite: Add test for mkfs.fat with two FAT32 sectors in reserved area

commit 3cca83a
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 10:36:33 2019 +0100

    mkfs.fat: Fix setting location of FAT32 backup boot sector
    
    For FAT32 if there are only two sectors in reserved area, first must be
    boot sector and second must be FAT32 fs info sector. And there would not be
    FAT32 backup boot sector as it is optional. FAT32 info sector is for FAT32
    media mandatory.
    
    When backup_boot variable is set to zero it means that no FAT32 backup boot
    sector is written. Check that FAT32 backup boot sector differs from FAT32
    info sector is already there.
    
    Also allow user to specify zero for -b option which disable creating of
    FAT32 backup boot sector.

commit c5e35e7
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 10:34:24 2019 +0100

    mkfs.fat: Put FAT32 info sector number into variable
    
    Also check that it is not same as backup boot sector value.

commit d276ddb
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Feb 17 10:32:08 2019 +0100

    mkfs.fat: Rename info_sector buffer variable to info_sector_buffer
    
    Also call free() unconditionally as it does nothing for NULL argument.

commit 5e936c9
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Nov 24 19:45:39 2018 +0100

    mkfs.fat: Remove dependency on systemd/udev
    
    There is no need that mkfs.fat depends on systemd. It uses it only for
    reading additional information about block device.
    
    This patch replace systemd/udev dependency code by reading those additional
    information about block device directly from sysfs.
    
    So no functionality of mkfs.fat is lost or removed.

commit 18a05e7
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jan 5 00:58:41 2020 +0100

    manpages: Fix '. SF' file names

commit 7e6d7d3
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Nov 24 18:18:53 2018 +0100

    manpages: Fix switching to previous font style
    
    In troff manpage language previous font style is selected by "\fP"
    sequence, not by "\fR". "\fR" selects roman font style.

commit ffa5dfa
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Nov 18 21:14:24 2018 +0100

    manpages: Fix formatting of bullets
    
    In troff manpage language bullet is written as "\(bu".

commit bc65dd6
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Nov 18 21:10:29 2018 +0100

    manpages: Fix formatting of emphases
    
    To emphasize use italic font style instead of putting word into two
    apostrophes. Ascii apostrophe in troff manpage language means "right single
    quotation mark", therefore putting word into two apostrophes is fully
    wrong.
    
    Also arguments and file names should be formatted in italic.

commit 0273989
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Nov 18 21:01:55 2018 +0100

    manpages: Fix formatting of hyphens, en and em dashes
    
    In troff manpage language ascii minus is written as "\-", mathematical
    minus as "\(mi", hyphen as "-", en-dash as "\(en" and em-dash as "\(em".

commit c85c863
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Oct 21 12:58:19 2018 +0200

    manpages: Clarify unit of BLOCK-COUNT
    
    BLOCK-COUNT is always in KiB unit independently of the disk sector size,
    FAT sector size or FAT cluster size.

commit 69fcfe5
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 19 16:35:22 2018 +0200

    fsck.fat: Check for DOS Clean Shutdown bit
    
    DOS Clean Shutdown bit in first reserved FAT entry is cleared when DOS or
    Windows FAT driver mounts a volume and set is back when doing unmount.
    Therefore set this bit when clearing FAT dirty bit in boot sector.

commit 68e8e54
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 4 14:53:28 2020 +0100

    mkfs.fat: Calculate CHS geometry according to SD Card Part 2 File System Specification
    
    Use this CHS calculation when disk geometry is not available. This change
    replaces hardcoded 64/32 value by formula based on total number of sectors.
    
    For SD cards with more then 256MB capacity is CHS calculation according to
    SD Card Part 2 File System Specification same as CHS calculation for hard
    disks via LBA-Assist Translation.

commit 5199d68
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 19 09:57:41 2018 +0200

    mkfs.fat: Add a new option --mbr which fills MBR table with one partition
    
    It is needed only for non-removable disks used on Microsoft Windows systems
    and only when formatting whole unpartitioned disk.
    
    Also some removable USB flash disks accessed via USB Mass Storage declares
    themselves as non-removable and Microsoft Windows systems do not recognize
    them without MBR partition table and MBR disk signature.
    
    Because MBR sector and first FAT sector are very similar (starts with
    boot code, ends with boot sign 0xAA55) they can live together at one
    sector. Moreover location of the MBR partition table overlaps only with the
    end of FAT boot code where is just place for the error message, it is
    possible to fill (fake) MBR partition table with one partition which refers
    to whole disk itself (starts at sector 0 and spans whole disk).
    
    Similar thing is doing mformat (FAT12/16/32 formatting tool) from mtools
    project or mkudffs (UDF formatting tool) from udftools project.

commit 9f856b7
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Jan 27 22:12:38 2020 +0100

    charconv: Do not use %lc format modifier for wide char which cannot be converted to multibyte string

commit 032ec02
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Jan 14 00:27:31 2020 +0100

    charconv: Fix usage of iconv() for state-dependent encodings
    
    After first main iconv() call set conversion state to the initial state and
    store corresponding shift sequence to output buffer via second iconv() call.

commit 4428d7d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Jan 13 23:15:22 2020 +0100

    charconv: Fix checks for overlong input strings

commit 2779d70
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 8 01:03:24 2020 +0100

    charconv: Use ICONV_CONST macro to fix compile warnings with GNU libiconv
    
    Macro ICONV_CONST is defined by autoconf and expands either to "const" or
    nothing based on what API provides iconv() implementation, either according
    to SUSv2 or POSIX.1-2001/POSIX.1-2008.

commit 565d7a2
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 8 01:02:16 2020 +0100

    charconv: Fix check for return value of iconv
    
    iconv() returns (unsigned) size_t type, so its return value is always
    different from (signed) negative -1. To compare with -1 it first needs to
    be casted to size_t type.

commit e9b42f5
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 8 00:44:27 2020 +0100

    charconv: Increase buffer size for output strings in current locale
    
    MSDOS_NAME * 4 does not have to be enough size as iconv in translit mode
    can return also 5 bytes per one wide character.

commit 1403c53
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jan 8 00:42:35 2020 +0100

    charconv: Fix buffer overflows by specifying output buffer size

commit 917846b
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Jan 7 00:54:15 2020 +0100

    charconv: Fix put_char() function
    
    Ensure that this function always print characters according to current
    locale. So do not treat characters above 0xA0 as printable when
    dos_char_to_printable() cannot process them.

commit 6dc68a8
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Jan 7 00:52:43 2020 +0100

    charconv: Fix comment for init_conversion() function

commit 2d6c37d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Jan 7 00:52:25 2020 +0100

    charconv: For internal CP850 conversion add translit table
    
    This CP850 translit table was created by iconv ASCII//TRANSLIT as a 7bit ASCII fallback.

commit 3ccfe29
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Tue Jan 7 00:50:09 2020 +0100

    charconv: As a fallback try to use also non-translit iconv conversion

commit 1b72fdf
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Jan 6 18:30:28 2020 +0100

    charconv: Use const for input strings

commit 102aa76
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Jan 6 18:29:30 2020 +0100

    charconv: Rename third argument of local_string_to_dos_string()
    
    Correct name is out_size as it is size of output buffer and not length of string.

commit 49cc12a
Author: Lennart Poettering <lennart@poettering.net>
Date:   Mon Aug 3 12:17:12 2020 +0200

    mkfs: fsync() the block device before exiting
    
    Let's make sure to sync the block device, before exiting. Otherwise, if
    we operate on a loop device and people issue "losetup -d" right after
    this command finishes our in-flight writes might never hit the disk.
    
    (This took 4h of my life for me to figure out. The mkfs for all other
    file systems I tested appear to synchronize when done, hence fat should
    do too.)

commit cc75143
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Jan 27 22:22:35 2020 +0100

    mkfs.fat: Mark struct fat32_fsinfo as packed

commit f8f455b
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Jan 27 22:25:20 2020 +0100

    fatlabel: Update documentation about DOS codepage

commit 3ce32fa
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 4 15:27:59 2020 +0100

    mkfs.fat: Clarify licensing of the dummy boot sector
    
    Original author H. Peter Anvin allowed to put mkfs.fat boot sector code
    into the public domain.

commit 8dc8976
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Fri Feb 14 00:00:27 2020 +0100

    manpages: Update documentation about hidden sectors
    
    Fixes #29

commit 17be357
Author: David Gumberg <davidzgumberg@gmail.com>
Date:   Sun Oct 13 18:21:57 2019 -0600

    Get cross-platform libc6 generically

commit 5e2529e
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Oct 14 12:21:36 2019 +0200

    travis: use if ... fi construction
    
    As single test command has side effect in return value for Travis.

commit 20092b8
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Oct 14 12:14:07 2019 +0200

    travis: Check for fatlabel test errors only for non-static builds
    
    Static builds have broken iconv support which is detected at configure time
    as usable. This leads to usage of internal CP850 conversion table as
    fallback solution which throws runtime non-fatal error.

commit a4a0d62
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Mon Oct 14 09:48:43 2019 +0200

    tests: Check for stderr errors from fatlabel tests

commit 84a8d1c
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jun 23 12:01:48 2019 +0200

    charconv: Update Travis configuration
    
    Use autogen.sh instead of non-working autoreconf and test also
    static linked versions and configurations without iconv.

commit b657ede
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Jun 23 10:47:44 2019 +0200

    charconv: Add autogen.sh script
    
    AM_ICONV macro depends on gettext installation. Unfortunately autoreconf is
    not able to install config.rpath file so do it manually in autogen.sh.
    
    See reported bug:
    https://lists.gnu.org/archive/html/bug-gettext/2011-10/msg00012.html

commit 0dec6a7
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jun 22 22:14:31 2019 +0200

    charconv: Fix sources for testdevinfo target
    
    testdevinfo does not use any of charconv functions, nor any of mkfs
    functions. So do not link charconv/mkfs into testdevinfo.
    
    This fixes linking problems when iconv functions are not present in
    standard libraries.

commit 664192e
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jun 22 01:23:54 2019 +0200

    charconv: Check return value of all set_dos_codepage() calls

commit 6d49a1f
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jun 22 01:16:44 2019 +0200

    charconv: Check presence of iconv
    
    Use autoconf AM_ICONV macro for it. AM_ICONV should handle both cases when
    iconv_open is available in external libiconv library or as part of libc
    library.
    
    To force compilation of dosfstools without iconv support there is a new
    configure option --without-iconv.

commit fa9761f
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jun 22 01:14:37 2019 +0200

    charconv: Fix return value from iconv_init_codepage function

commit d74c592
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jun 22 01:12:46 2019 +0200

    charconv: Add fallback to internal CP850 table
    
    Static linked version of glibc does not contain iconv with CP850 support.
    As CP850 is default code page for all dosfstools programs add own internal
    implementation which will be always supported. It would be used only in
    case iconv_open() fails.

commit 91978a2
Author: Michael Forney <mforney@mforney.org>
Date:   Fri Jun 7 08:48:13 2019 -0700

    Use static inline function instead of statement expression

commit e06e759
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Wed Jun 5 09:25:52 2019 +0200

    Fix Travis CI configuration for powerpc and arm

commit fc55b63
Author: Noé Rubinstein <nrubinstein@aldebaran.com>
Date:   Mon Aug 31 15:19:57 2015 +0200

    mkfs: document --offset in the man page

commit f473459
Author: Noé Rubinstein <nrubinstein@aldebaran.com>
Date:   Thu Jul 2 15:49:06 2015 +0200

    Allow specifying an offset in the device file in mkfs

commit 93b4288
Author: Tobias Stoeckmann <stoeckmann@users.noreply.github.com>
Date:   Sun Feb 24 20:55:15 2019 +0100

    Fix out of boundary read in fsck.fat/fatlabel
    
    Faulty filesystems are able to trigger integer overflows in read_boot which eventually lead to insufficient allocation of memory for the FAT and therefore out of boundary reads.

commit af3e50d
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 12 12:15:45 2018 +0200

    device_info: Fix parsing partition number
    
    Ensures that it is always valid number which does not overflow or
    underflow.

commit 086e13c
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 12 12:15:21 2018 +0200

    mkfs.fat: Fix parsing of block number
    
    Block number must not be negative. It is 32bit so use long long type and
    strtoll() function to ensure that converted positive 32bit value would fit
    into type.

commit a2b97c9
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 12 12:13:35 2018 +0200

    mkfs.fat: Fix validation of numeric command line arguments
    
    Ensures that argument is always valid number which does not overflow or
    underflow.

commit 07e63ac
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Aug 12 11:56:32 2018 +0200

    mkfs.fat: Fix validation of volume ID
    
    Use same logic as in fatlabel.

commit 425a415
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Aug 11 22:49:37 2018 +0200

    fatlabel: Fix validation of volume ID
    
    Standard C function strtoull() does not signal underflow, therefore it
    cannot be used for conversion of arbitrary string to integer with detection
    of failure.
    
    Instead use function strtoll() and detect underflow (negative value)
    manually.
    
    Note that strto* functions skips and ignores leading whitespace characters,
    so detects them manually via standard C function isspace().

commit da07aa4
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Jan 19 09:48:25 2019 +0100

    Update Travis configuration
    
    * Use both gcc and clang compilers
    * Compile with -fwrapv and -fsanitize=address
    * Compile in both 32 and 64 modes for x86 systems
    * Cross compile for little endian arm and big endian powerpc
    * Run cross compiled binaries in qemu

commit a6ec69d
Author: Tobias Stoeckmann <tobias@stoeckmann.org>
Date:   Mon Jan 14 22:47:40 2019 +0100

    Renamed len to out_size.
    
    As pointed out by pali it makes sense to rename len to out_size
    to make explicitly sure by proper naming that this is the actually
    available memory size at "out", not the length of a string.
    
    Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>

commit 6080fe2
Author: Tobias Stoeckmann <tobias@stoeckmann.org>
Date:   Mon Jan 14 19:36:11 2019 +0100

    Fixed off-by-one in local_string_to_dos_string.
    
    The function local_string_to_dos_string is vulnerable to an off-by-one
    buffer overflow. In fact, it is triggered in default usage and becomes
    visible when compiled with ASAN:
    
    $ CFLAGS="-fsanitize=address" ./configure
    $ dd if=/dev/zero of=example.iso bs=1024 seek=64 count=1
    $ ./src/mkfs.fat example.iso
    mkfs.fat 4.1+git (2017-01-24)
    =================================================================
    ==3857==ERROR: AddressSanitizer: stack-buffer-overflow on address ...
    
    The problem is that the argument "len" to local_string_to_dos_string
    stores the length of the output buffer. Yet it can also be used as an
    index to store '\0':
    
    If the whole "out" buffer has been written to, bytes_out is 0 and
    the assignment in out[len-bytes_out] therefore leads to an off-by-one.
    
    Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>

commit 332fc29
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sun Nov 18 20:47:29 2018 +0100

    Fix memory leaks in read_fat() function
    
    Function read_fat() allocates memory to the user supplied buffer. Therefore
    that function needs complement function for releasing allocated memory and
    user needs to call if after finish its work.
    
    This patch fixes memory leaks in fsck.fat and fatlabel tools.
    
    Fixes #13

commit 4cfd643
Author: Pali Rohár <pali.rohar@gmail.com>
Date:   Sat Sep 29 10:08:12 2018 +0200

    mkfs.fat: Fix endianity for hidden_sectors
    
    Global variable hidden_sectors is in host byte order.

