Updates and Migration Notes

RevisionUpdatesMigration Notes
R0.16
Jul 22, 2025
  • Removed a long-pending limitation that f_getcwd and double-dot ".." in the path name did not work on the exFAT volume.
  • Fixed f_readdir cannot detect end of directory and it leads the application process into infinite loop. (appeared at R0.15b)
  • Fixed dot names with terminating separator or duplicated separator are rejected when LFN is not enabled.
  • Maximum depth of sub-directory on the exFAT volume is limited to the configured level FF_PATH_DEPTH when relative path is enabled.
R0.15b
Jun 21, 2025
  • Added support for the timestamp of created time. (FF_FS_CRTIME)
  • Fixed FatFs fails to load the FsInfo in FAT32 volumes and the f_getfree always be forced a full FAT scan which takes a long time. (appeared at R0.15a)
  • Small changes to the f_utime function to support for the timestamp of created time.
R0.15a
Nov 22, 2024
  • Fixed a complie error when FF_FS_LOCK != 0. (appeared at R0.15)
  • Fixed a potential issue when work FatFs concurrency with FF_FS_REENTRANT, FF_VOLUMES >= 2 and FF_FS_LOCK > 0.
  • Made f_setlabel accept a volume label with Unix style volume ID when FF_STR_VOLUME_ID == 2.
  • Made FatFs update PercInUse field in exFAT VBR. (A preceding f_getfree is needed for the accuracy)
R0.15
Nov 6, 2022
  • Changed user provided synchronization functions in order to completely eliminate the platform dependency from FatFs code.
  • Fixed a potential error in f_mount when FF_FS_REENTRANT.
  • Fixed file lock control FF_FS_LOCK is not mutal excluded when FF_FS_REENTRANT && FF_VOLUMES > 1 is true.
  • Fixed f_mkfs creates broken exFAT volume when the size of volume is >= 2^32 sectors.
  • Fixed string functions cannot write the unicode characters not in BMP when FF_LFN_UNICODE == 2 (UTF-8).
  • Fixed a compatibility issue in identification of GPT header.
  • User provided synchronization functions, ff_cre_syncobj, ff_del_syncobj, ff_req_grant and ff_rel_grant, needed when FF_FS_REENTRANT are replaced with ff_mutex_create, ff_mutex_delete, ff_mutex_take and ff_mutex_give respectively. For example, see ffsystem.c.
  • FF_SYNC_t is removed from the configuration options.
R0.14b
Apr 17, 2021
  • Made FatFs uses standard library string.h for copy, compare and search instead of built-in string functions.
  • Added support for long long integer and floating point to f_printf. (FF_STRF_LLI and FF_STRF_FP)
  • Made path name parser ignores the terminating separator to allow "dir/".
  • Improved the compatibility in Unix style path name feature.
  • Fixed the file gets dead-locked when f_open failed with certain conditions. (appeared at R0.12a)
  • Fixed f_mkfs can create wrong exFAT volume due to a timing dependent error. (appeared at R0.12)
  • Fixed code page 855 cannot be set by f_setcp. (appeared at R0.13)
  • Fixed some compiler warnings.
  • From this revision, FatFs depends on string.h.
R0.14a
Dec 05, 2020
  • Limited number of recursive calls in f_findnext to prevent stack overflow.
  • Fixed old floppy disks formatted with MS-DOS 2.x and 3.x cannot be mounted.
  • Fixed some compiler warnings.
  • Number of wildcards in the matching pattern in f_findfirst is limited to 4.
R0.14
Oct 14, 2019
  • Added support for 64-bit LBA and GUID partition table (FF_LBA64)
  • Changed some API functions, f_mkfs and f_fdisk.
  • Fixed f_open cannot find the file with file name in length of FF_MAX_LFN characters.
  • Fixed f_readdir cannot retrieve long file names in length of FF_MAX_LFN - 1 characters.
  • Fixed f_readdir returns file names with wrong case conversion. (appeared at R0.12)
  • Fixed f_mkfs can fail to create exFAT volume in the second partition. (appeared at R0.12)
  • Usage of f_mkfs and f_fdisk is changed and some features are added to these functions.
R0.13c
Oct 14, 2018
  • Supported stdint.h for C99 and later. (integer.h was included in ff.h)
  • Fixed reading a directory gets infinite loop when the last directory entry is not empty. (appeared at R0.12)
  • Fixed creating a sub-directory in the fragmented sub-directory on the exFAT volume collapses FAT chain of the parent directory. (appeared at R0.12)
  • Fixed f_getcwd cause output buffer overrun when the buffer has a valid drive number. (appeared at R0.13b)
  • From this revision, FatFs depends on stdint.h in C99 or later.
  • integer.h is removed.
R0.13b
Apr 07, 2018
  • Added support for UTF-32 encoding on the API. (FF_LFN_UNICODE = 3)
  • Added support for Unix style volume prefix. (FF_STR_VOLUME_ID = 2)
  • Fixed accesing objects in the exFAT root directory beyond the cluster boundary can fail. (appeared at R0.12c)
  • Fixed f_setlabel does not reject some invalid characters. (appeared at R0.09b)
R0.13a
Oct 14, 2017
  • Added support for UTF-8 encoding on the API. (FF_LFN_UNICODE = 2)
  • Added options for file name output buffer. (FF_LFN_BUF, FF_SFN_BUF)
  • Added dynamic memory allocation option for working buffer of f_mkfs and f_fdisk.
  • Fixed f_fdisk and f_mkfs create the partition table with wrong CHS parameters. (appeared at R0.09)
  • Fixed f_unlink can cause lost clusters at fragmented file on the exFAT volume. (appeared at R0.12c)
  • Fixed f_setlabel rejects some valid characters for exFAT volume. (appeared at R0.12)
R0.13
May 21, 2017
  • Prefix of configuration item names are changed from "_" to "FF_".
  • Added f_setcp, run-time code page configuration. (FF_CODE_PAGE = 0)
  • Improved cluster allocation time on stretch a deep buried cluster chain.
  • Improved processing time of f_mkdir with large cluster size by using FF_USE_LFN = 3.
  • Improved exFAT NoFatChain flag of the fragmented file to be set after it is truncated and got contiguous.
  • Fixed archive attribute is left not set when a file on the exFAT volume is renamed. (appeared at R0.12)
  • Fixed exFAT FAT entry can be collapsed when write or lseek operation to the existing file is done. (appeared at R0.12c)
  • Fixed creating a file can fail when a new cluster allocation to the exFAT directory occures. (appeared at R0.12c)
  • ASCII only configuration, FF_CODE_PAGE = 1, is removed. Use FF_CODE_PAGE = 437 instead.
R0.12c
Mar 04, 2017
  • Improved write throughput at the fragmented file on the exFAT volume.
  • Made memory usage for exFAT be able to be reduced as decreasing _MAX_LFN.
  • Fixed successive f_getfree can return wrong count on the FAT12/16 volume. (appeared at R0.12)
  • Fixed configuration option _VOLUMES cannot be set 10. (appeared at R0.10c)
R0.12b
Sep 4, 2016
  • Made f_rename be able to rename objects with the same name but case.
  • Fixed an error in the case conversion teble of code page 866. (ff.c)
  • Fixed writing data is truncated at the file offset 4GiB on the exFAT volume. (appeared at R0.12)
  • Fixed creating a file in the root directory of exFAT volume can fail. (appeared at R0.12)
  • Fixed f_mkfs creating exFAT volume with too small cluster size can collapse unallocated memory. (appeared at R0.12a)
  • Fixed wrong object name can be returned when read directory at Unicode cfg. (appeared at R0.12)
  • Fixed large file allocation/removing on the exFAT volume collapses allocation bitmap. (appeared at R0.12)
  • Fixed some internal errors in f_expand and f_lseek. (appeared at R0.12)
R0.12a
Jul 10, 2016
  • Added support for creating exFAT volume with some changes of f_mkfs.
  • Added a file open method FA_OPEN_APPEND.
  • f_forward is available regardless of _FS_TINY.
  • Fixed f_mkfs creates broken volume. (appeared at R0.12)
  • Fixed wrong memory read in create_name. (appeared at R0.12)
  • Fixed compilation fails at some configurations, _USE_FASTSEEK and _USE_FORWARD.
  • Usage of f_mkfs is changed.
R0.12
Apr 12, 2016
  • Added support for exFAT file system. (_FS_EXFAT)
  • Added f_expand. (_USE_EXPAND)
  • Changed some members in FINFO and behavior of f_readdir.
  • Added a configuration option _USE_CHMOD.
  • Fixed errors in the case conversion teble of Unicode (cc*.c).
  • Usage and members of FINFO sructure used in f_readdir is changed.
  • Dot entries in the sub-directory are never appear in f_readdir.
  • ".." does not work as path name in exFAT volume.
  • f_getcwd does not work in exFAT volume.
  • Many members in FIL and DIR structure are changed.
  • To use f_chmod, _USE_CHMOD needs to be set.
  • _WORD_ACCESS is removed from the configuration options.
R0.11a
Sep 5, 2015
  • Fixed wrong media change can lead a deadlock at thread-safe configuration.
  • Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE)
  • Fixed errors in the case conversion teble of code page 437 and 850 (ff.c).
  • Fixed errors in the case conversion teble of Unicode (cc*.c).
  • Removed some code pages actually not exist on the standard systems. (_CODE_PAGE)
R0.11
Feb 9, 2015
  • Added f_findfirst and f_findnext. (_USE_FIND)
  • Fixed f_unlink does not remove cluster chain of the file. (appeared at R0.10c)
  • Fixed _FS_NORTC option does not work properly. (appeared at R0.10c)
R0.10c
Nov 9, 2014
  • Added a configuration option for the platforms without RTC. (_FS_NORTC)
  • Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel. (appeared at R0.09b)
  • Fixed a potential problem of FAT access that can appear on disk error.
  • Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08)
R0.10b
May 19, 2014
  • Fixed a hard error in the disk I/O layer can collapse the directory entry.
  • Fixed LFN entry is not deleted on delete/rename an object with its lossy converted SFN. (appeared at R0.07)
R0.10a
Jan 15, 2014
  • Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID)
  • Added an option for minimum sector size. (_MIN_SS)
  • 2nd argument of f_rename can have a drive number and it will be ignored.
  • Fixed f_mount with forced mount fails when drive number is larger than 0. (appeared at R0.10)
  • Fixed f_close invalidates the file object without volume lock.
  • Fixed volume lock is left acquired after return from f_closedir. (appeared at R0.10)
  • Fixed creation of a directory entry with LFN fails on too many SFN collisions. (appeared at R0.07)
R0.10
Oct 2, 2013
  • Added an option for character encoding on the file. (_STRF_ENCODE)
  • Added f_closedir.
  • Added forced full FAT scan option for f_getfree. (_FS_NOFSINFO)
  • Added forced mount option with changes of f_mount.
  • Improved behavior of volume auto detection.
  • Improved write throughput of f_puts and f_printf.
  • Changed argument of f_chdrive, f_mkfs, disk_read and disk_write.
  • Fixed f_write can be truncated when the file size is close to 4 GB.
  • Fixed f_open, f_mkdir and f_setlabel can return incorrect result code on error.
R0.09b
Jan 24, 2013
  • Added f_getlabel and f_setlabel. (_USE_LABEL)
R0.09a
Aug 27, 2012
  • Fixed assertion failure due to OS/2 EA on FAT12/16 volume.
  • Changed file functions reject null object pointer to avoid crash.
  • Changed option name _FS_SHARE to _FS_LOCK.
R0.09
Sep 6, 2011
  • f_mkfs supports multiple partition on a physical drive.
  • Added f_fdisk. (_MULTI_PARTITION = 2)
R0.08b
Jan 15, 2011
  • Fast seek function is also applied to f_read and f_write.
  • f_lseek reports required table size on creating CLMP.
  • Extended format syntax of f_printf.
  • Ignores duplicated directory separators in given path names.
R0.08a
Aug 16, 2010
  • Added f_getcwd. (_FS_RPATH = 2)
  • Added sector erase function. (_USE_ERASE)
  • Moved file lock semaphore table from fs object to the bss.
  • Fixed f_mkdir creates wrong directory on non-LFN cfg when the given name contains ';'.
  • Fixed f_mkfs creates wrong FAT32 volume.
R0.08
May 15, 2010
  • Added an option to _USE_LFN
  • Added support of file lock. (_FS_SHARE)
  • Added fast seek function. (_USE_FASTSEEK)
  • Changed a type name on the API, XCHAR to TCHAR.
  • Changed member, fname, in the FILINFO on Unicode cfg.
  • String functions support UTF-8 encoding files on Unicode cfg.
R0.07e
Nov 3, 2009
  • Separated out configuration options from ff.h to ffconf.h.
  • Added a configuration option, _LFN_UNICODE.
  • Fixed f_unlink fails to remove a sub-dir on _FS_RPATH.
  • Fixed name matching error on the 13 char boundary.
  • Changed f_readdir to return the SFN with always upper case on non-LFN cfg.
R0.07c
Jan 21, 2009
  • Fixed f_unlink may return FR_OK on error.
  • Fixed wrong cache control in f_lseek.
  • Added support of relative path.
  • Added f_chdir.
  • Added f_chdrive.
  • Added proper case conversion to extended characters.
R0.07a
Apr 14, 2009
  • Separated out OS dependent code on re-entrant configuration.
  • Added multiple sector size support.
R0.07
Apr 1, 2009
  • Merged Tiny-FatFs into FatFs as a buffer configuration option.
  • Added support for long file extension.
  • Added multiple code page support.
  • Added re-entrancy for multitask operation.
  • Added auto cluster size selection to f_mkfs.
  • Added rewind option to f_readdir.
  • Changed result code of critical errors.
  • Renamed string functions to avoid name collision.
R0.06
Apr 1, 2008
  • Added f_forward. (Tiny-FatFs)
  • Added string functions: f_gets, f_putc, f_puts and f_printf.
  • Improved performance of f_lseek on moving to the same or following cluster.
R0.05a
Feb 3, 2008
  • Added f_truncate.
  • Added f_utime.
  • Fixed off by one error at FAT sub-type determination.
  • Fixed btr in f_read can be mistruncated.
  • Fixed cached sector is left not flushed when create and close without write.
R0.05
Aug 26, 2007
  • Changed arguments of f_read, f_write.
  • Changed arguments of f_mkfs. (FatFs)
  • Fixed f_mkfs on FAT32 creates incorrect FSInfo. (FatFs)
  • Fixed f_mkdir on FAT32 creates broken directory. (FatFs)
R0.04b
May 5, 2007
  • Added _USE_NTFLAG option.
  • Added support for FSInfo in FAT32 volume.
  • Fixed some problems corresponds to FAT32. (Tiny-FatFs)
  • Fixed DBCS name can result FR_INVALID_NAME.
  • Fixed short seek (<= csize) collapses the file object.
R0.04a
Apr 1, 2007
  • Supported multiple partitions on a plysical drive. (FatFs)
  • Added minimization level 3.
  • Added a capability of extending file size to f_lseek.
  • Fixed an endian sensitive code in f_mkfs. (FatFs)
  • Fixed a problem corresponds to FAT32 support. (Tiny-FatFs)
R0.04
Feb 4, 2007
  • Supported multiple drive system. (FatFs)
  • Changed some APIs for multiple drive system.
  • Added f_mkfs. (FatFs)
  • Added _USE_FAT32 option. (Tiny-FatFs)
R0.03a
Dec 11, 2006
  • Improved cluster scan algolithm to write files fast.
  • Fixed f_mkdir creates broken directory on FAT32.
R0.03
Sep 22, 2006
  • Added f_rename.
  • Changed option _FS_MINIMUM to _FS_MINIMIZE.
R0.02a
Jun 10, 2006
  • Added a configuration option _FS_MINIMUM.
R0.02
Jun 01, 2006
  • Added FAT12.
  • Removed unbuffered mode.
  • Fixed a problem on small (<32M) patition.
R0.01
Apr 29, 2006
  • First release.

Return