## Updates and Migration Notes

Revision | Updates | Migration 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