1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2<html lang="en"> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5<meta http-equiv="Content-Style-Type" content="text/css"> 6<meta http-equiv="cache-control" content="no-cache"> 7<link rel="start" title="Site Top" href="../../"> 8<link rel="stylesheet" href="css_e.css" type="text/css" media="screen" title="ELM Default"> 9<title>FatFs - Updates and Migration Notes</title> 10</head> 11<body style="max-width: none;"> 12<h2>Updates and Migration Notes</h2> 13<table class="lst4"> 14<tr><th>Revision</th><th>Updates</th><th>Migration Notes</th></tr> 15<tr> 16<td>R0.15<br>Nov 6, 2022</td> 17<td> 18Changed user provided synchronization functions in order to completely eliminate the platform dependency from FatFs code.<br> 19Fixed a potential error in <tt>f_mount</tt> when <tt>FF_FS_REENTRANT</tt>.<br> 20Fixed file lock control <tt>FF_FS_LOCK</tt> is not mutal excluded when <tt>FF_FS_REENTRANT && FF_VOLUMES > 1</tt> is true.<br> 21Fixed <tt>f_mkfs</tt> creates broken exFAT volume when the size of volume is <tt>>= 2^32</tt> sectors.<br> 22Fixed string functions cannot write the unicode characters not in BMP when <tt>FF_LFN_UNICODE == 2</tt> (UTF-8).<br> 23Fixed a compatibility issue in identification of GPT header.<br> 24</td> 25<td> 26User provided synchronization functions, <tt>ff_cre_syncobj</tt>, <tt>ff_del_syncobj</tt>, <tt>ff_req_grant</tt> and <tt>ff_rel_grant</tt>, needed when <tt>FF_FS_REENTRANT</tt> are replaced with <tt>ff_mutex_create</tt>, <tt>ff_mutex_delete</tt>, <tt>ff_mutex_take</tt> and <tt>ff_mutex_give</tt> respectively. For example, see <tt>ffsystem.c</tt>.<br> 27<tt>FF_SYNC_t</tt> is removed from the configuration options.<br> 28</td> 29</tr> 30<tr> 31<td>R0.14b<br>Apr 17, 2021</td> 32<td> 33Made FatFs uses standard library <tt>string.h</tt> for copy, compare and search instead of built-in string functions.<br> 34Added support for long long integer and floating point to <tt>f_printf</tt>. (<tt>FF_STRF_LLI</tt> and <tt>FF_STRF_FP</tt>)<br> 35Made path name parser ignores the terminating separator to allow <tt>"dir/"</tt>.<br> 36Improved the compatibility in Unix style path name feature.<br> 37Fixed the file gets dead-locked when <tt>f_open</tt> failed with certain conditions. (appeared at R0.12a)<br> 38Fixed <tt>f_mkfs</tt> can create wrong exFAT volume due to a timing dependent error. (appeared at R0.12)<br> 39Fixed code page 855 cannot be set by <tt>f_setcp</tt>. (appeared at R0.13)<br> 40Fixed some compiler warnings.<br> 41</td> 42<td> 43From this revision, FatFs depends on <tt>string.h</tt>.<br> 44</td> 45</tr> 46<tr> 47<td>R0.14a<br>Dec 05, 2020</td> 48<td> 49Limited number of recursive calls in <tt>f_findnext</tt> to prevent stack overflow.<br> 50Fixed old floppy disks formatted with MS-DOS 2.x and 3.x cannot be mounted.<br> 51Fixed some compiler warnings.<br> 52</td> 53<td> 54Number of wildcards in the matching pattern in <tt>f_findfirst</tt> is limited to 4.<br> 55</td> 56</tr> 57<tr> 58<td>R0.14<br>Oct 14, 2019</td> 59<td> 60Added support for 64-bit LBA and GUID partition table (<tt>FF_LBA64</tt>)<br> 61Changed some API functions, <tt>f_mkfs</tt> and <tt>f_fdisk</tt>.<br> 62Fixed <tt>f_open</tt> cannot find the file with file name in length of <tt>FF_MAX_LFN</tt> characters.<br> 63Fixed <tt>f_readdir</tt> cannot retrieve long file names in length of <tt>FF_MAX_LFN - 1</tt> characters.<br> 64Fixed <tt>f_readdir</tt> returns file names with wrong case conversion. (appeared at R0.12)<br> 65Fixed <tt>f_mkfs</tt> can fail to create exFAT volume in the second partition. (appeared at R0.12)<br> 66</td> 67<td> 68Usage of <tt>f_mkfs</tt> and <tt>f_fdisk</tt> is changed and some features are added to these functions.<br> 69</td> 70</tr> 71<tr> 72<td>R0.13c<br>Oct 14, 2018</td> 73<td> 74Supported <tt>stdint.h</tt> for C99 and later. (<tt>integer.h</tt> was included in <tt>ff.h</tt>)<br> 75Fixed reading a directory gets infinite loop when the last directory entry is not empty. (appeared at R0.12)<br> 76Fixed creating a sub-directory in the fragmented sub-directory on the exFAT volume collapses FAT chain of the parent directory. (appeared at R0.12)<br> 77Fixed <tt>f_getcwd</tt> cause output buffer overrun when the buffer has a valid drive number. (appeared at R0.13b)<br> 78</td> 79<td> 80From this revision, FatFs depends on <tt>stdint.h</tt> in C99 or later.<br> 81<tt>integer.h</tt> is removed.<br> 82</td> 83</tr> 84<tr> 85<td>R0.13b<br>Apr 07, 2018</td> 86<td> 87Added support for UTF-32 encoding on the API. (<tt>FF_LFN_UNICODE = 3</tt>)<br> 88Added support for Unix style volume prefix. (<tt>FF_STR_VOLUME_ID = 2</tt>)<br> 89Fixed accesing objects in the exFAT root directory beyond the cluster boundary can fail. (appeared at R0.12c)<br> 90Fixed <tt>f_setlabel</tt> does not reject some invalid characters. (appeared at R0.09b)<br> 91</td> 92<td> 93</td> 94</tr> 95<tr> 96<td>R0.13a<br>Oct 14, 2017</td> 97<td> 98Added support for UTF-8 encoding on the API. (<tt>FF_LFN_UNICODE = 2</tt>)<br> 99Added options for file name output buffer. (<tt>FF_LFN_BUF, FF_SFN_BUF</tt>)<br> 100Added dynamic memory allocation option for working buffer of <tt>f_mkfs</tt> and <tt>f_fdisk</tt>.<br> 101Fixed <tt>f_fdisk</tt> and <tt>f_mkfs</tt> create the partition table with wrong CHS parameters. (appeared at R0.09)<br> 102Fixed <tt>f_unlink</tt> can cause lost clusters at fragmented file on the exFAT volume. (appeared at R0.12c)<br> 103Fixed <tt>f_setlabel</tt> rejects some valid characters for exFAT volume. (appeared at R0.12)<br> 104</td> 105<td> 106</td> 107</tr> 108<tr> 109<td>R0.13<br>May 21, 2017</td> 110<td> 111Prefix of configuration item names are changed from <tt>"_"</tt> to <tt>"FF_"</tt>.<br> 112Added <tt>f_setcp</tt>, run-time code page configuration. (<tt>FF_CODE_PAGE = 0</tt>)<br> 113Improved cluster allocation time on stretch a deep buried cluster chain.<br> 114Improved processing time of <tt>f_mkdir</tt> with large cluster size by using <tt>FF_USE_LFN = 3</tt>.<br> 115Improved exFAT <tt>NoFatChain</tt> flag of the fragmented file to be set after it is truncated and got contiguous.<br> 116Fixed archive attribute is left not set when a file on the exFAT volume is renamed. (appeared at R0.12)<br> 117Fixed exFAT FAT entry can be collapsed when write or lseek operation to the existing file is done. (appeared at R0.12c)<br> 118Fixed creating a file can fail when a new cluster allocation to the exFAT directory occures. (appeared at R0.12c)<br> 119</td> 120<td> 121ASCII only configuration, <tt>FF_CODE_PAGE = 1</tt>, is removed. Use <tt>FF_CODE_PAGE = 437</tt> instead.<br> 122</td> 123</tr> 124<tr> 125<td>R0.12c<br>Mar 04, 2017</td> 126<td> 127Improved write throughput at the fragmented file on the exFAT volume.<br> 128Made memory usage for exFAT be able to be reduced as decreasing <tt>_MAX_LFN</tt>.<br> 129Fixed successive <tt>f_getfree</tt> can return wrong count on the FAT12/16 volume. (appeared at R0.12)<br> 130Fixed configuration option <tt>_VOLUMES</tt> cannot be set 10. (appeared at R0.10c)<br> 131</td> 132<td> 133</td> 134</tr> 135<tr> 136<td>R0.12b<br>Sep 4, 2016</td> 137<td> 138Made <tt>f_rename</tt> be able to rename objects with the same name but case.<br> 139Fixed an error in the case conversion teble of code page 866. (<tt>ff.c</tt>)<br> 140Fixed writing data is truncated at the file offset 4GiB on the exFAT volume. (appeared at R0.12)<br> 141Fixed creating a file in the root directory of exFAT volume can fail. (appeared at R0.12)<br> 142Fixed <tt>f_mkfs</tt> creating exFAT volume with too small cluster size can collapse unallocated memory. (appeared at R0.12a)<br> 143Fixed wrong object name can be returned when read directory at Unicode cfg. (appeared at R0.12)<br> 144Fixed large file allocation/removing on the exFAT volume collapses allocation bitmap. (appeared at R0.12)<br> 145Fixed some internal errors in <tt>f_expand</tt> and <tt>f_lseek.</tt> (appeared at R0.12)<br> 146</td> 147<td> 148</td> 149</tr> 150<tr> 151<td>R0.12a<br>Jul 10, 2016</td> 152<td> 153Added support for creating exFAT volume with some changes of <tt>f_mkfs</tt>.<br> 154Added a file open method <tt>FA_OPEN_APPEND</tt>.<br> 155<tt>f_forward</tt> is available regardless of <tt>_FS_TINY</tt>.<br> 156Fixed <tt>f_mkfs</tt> creates broken volume. (appeared at R0.12)<br> 157Fixed wrong memory read in <tt>create_name</tt>. (appeared at R0.12)<br> 158Fixed compilation fails at some configurations, <tt>_USE_FASTSEEK</tt> and <tt>_USE_FORWARD</tt>.<br> 159</td> 160<td> 161Usage of <tt>f_mkfs</tt> is changed.<br> 162</td> 163</tr> 164<tr> 165<td>R0.12<br>Apr 12, 2016</td> 166<td> 167Added support for exFAT file system. (<tt>_FS_EXFAT</tt>)<br> 168Added <tt>f_expand</tt>. (<tt>_USE_EXPAND</tt>)<br> 169Changed some members in <tt>FINFO</tt> and behavior of <tt>f_readdir</tt>.<br> 170Added a configuration option <tt>_USE_CHMOD</tt>.<br> 171Fixed errors in the case conversion teble of Unicode (<tt>cc*.c</tt>).<br> 172</td> 173<td> 174Usage and members of <tt>FINFO</tt> sructure used in <tt>f_readdir</tt> is changed.<br> 175Dot entries in the sub-directory are never appear in <tt>f_readdir</tt>.<br> 176<tt>".."</tt> does not work as path name in exFAT volume.<br> 177<tt>f_getcwd</tt> does not work in exFAT volume.</br> 178Many members in <tt>FIL</tt> and <tt>DIR</tt> structure are changed.<br> 179To use <tt>f_chmod</tt>, <tt>_USE_CHMOD</tt> needs to be set.<br> 180<tt>_WORD_ACCESS</tt> is removed from the configuration options.<br> 181</td> 182</tr> 183<tr> 184<td>R0.11a<br>Sep 5, 2015</td> 185<td> 186Fixed wrong media change can lead a deadlock at thread-safe configuration.<br> 187Added code page 771, 860, 861, 863, 864, 865 and 869. (<tt>_CODE_PAGE</tt>)<br> 188Fixed errors in the case conversion teble of code page 437 and 850 (<tt>ff.c</tt>).<br> 189Fixed errors in the case conversion teble of Unicode (<tt>cc*.c</tt>).<br> 190</td> 191<td> 192Removed some code pages actually not exist on the standard systems. (<tt>_CODE_PAGE</tt>)<br> 193</td> 194</tr> 195<tr> 196<td>R0.11<br>Feb 9, 2015</td> 197<td> 198Added <tt>f_findfirst</tt> and <tt>f_findnext.</tt> (<tt>_USE_FIND</tt>)<br> 199Fixed <tt>f_unlink</tt> does not remove cluster chain of the file. (appeared at R0.10c)<br> 200Fixed <tt>_FS_NORTC</tt> option does not work properly. (appeared at R0.10c)<br> 201</td> 202<td> 203</td> 204</tr> 205<tr> 206<td>R0.10c<br>Nov 9, 2014</td> 207<td> 208Added a configuration option for the platforms without RTC. (<tt>_FS_NORTC</tt>)<br> 209Fixed volume label created by Mac OS X cannot be retrieved with <tt>f_getlabel</tt>. (appeared at R0.09b)<br> 210Fixed a potential problem of FAT access that can appear on disk error.<br> 211Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08)<br> 212</td> 213<td> 214</td> 215</tr> 216<tr> 217<td>R0.10b<br>May 19, 2014</td> 218<td> 219Fixed a hard error in the disk I/O layer can collapse the directory entry.<br> 220Fixed LFN entry is not deleted on delete/rename an object with its lossy converted SFN. (appeared at R0.07)<br> 221</td> 222<td> 223</td> 224</tr> 225<tr> 226<td>R0.10a<br>Jan 15, 2014</td> 227<td> 228Added arbitrary strings as drive number in the path name. (<tt>_STR_VOLUME_ID</tt>)<br> 229Added an option for minimum sector size. (<tt>_MIN_SS</tt>)<br> 2302nd argument of <tt>f_rename</tt> can have a drive number and it will be ignored.<br> 231Fixed <tt>f_mount</tt> with forced mount fails when drive number is larger than 0. (appeared at R0.10)<br> 232Fixed <tt>f_close</tt> invalidates the file object without volume lock.<br> 233Fixed volume lock is left acquired after return from <tt>f_closedir</tt>. (appeared at R0.10)<br> 234Fixed creation of a directory entry with LFN fails on too many SFN collisions. (appeared at R0.07)<br> 235</td> 236<td> 237</td> 238</tr> 239<tr> 240<td>R0.10<br>Oct 2, 2013</td> 241<td> 242Added an option for character encoding on the file. (<tt>_STRF_ENCODE</tt>)<br> 243Added f_closedir.<br> 244Added forced full FAT scan option for <tt>f_getfree</tt>. (<tt>_FS_NOFSINFO</tt>)<br> 245Added forced mount option with changes of <tt>f_mount</tt>.<br> 246Improved behavior of volume auto detection.<br> 247Improved write throughput of <tt>f_puts</tt> and <tt>f_printf</tt>.<br> 248Changed argument of <tt>f_chdrive,</tt> <tt>f_mkfs</tt>, <tt>disk_read</tt> and <tt>disk_write</tt>.<br> 249Fixed <tt>f_write</tt> can be truncated when the file size is close to 4 GB.<br> 250Fixed <tt>f_open</tt>, <tt>f_mkdir</tt> and <tt>f_setlabel</tt> can return incorrect result code on error.<br> 251</td> 252<td> 253</td> 254</tr> 255<tr> 256<td>R0.09b<br>Jan 24, 2013</td> 257<td> 258Added <tt>f_getlabel</tt> and <tt>f_setlabel</tt>. (<tt>_USE_LABEL</tt>)<br> 259</td> 260<td> 261</td> 262</tr> 263<tr> 264<td>R0.09a<br>Aug 27, 2012</td> 265<td> 266Fixed assertion failure due to OS/2 EA on FAT12/16 volume.<br> 267Changed file functions reject null object pointer to avoid crash.<br> 268Changed option name <tt>_FS_SHARE</tt> to <tt>_FS_LOCK</tt>.<br> 269</td> 270<td> 271</td> 272</tr> 273<tr> 274<td>R0.09<br>Sep 6, 2011</td> 275<td> 276<tt>f_mkfs</tt> supports multiple partition on a physical drive.<br> 277Added <tt>f_fdisk</tt>. (<tt>_MULTI_PARTITION = 2</tt>)<br> 278</td> 279<td> 280</td> 281</tr> 282<tr> 283<td>R0.08b<br>Jan 15, 2011</td> 284<td> 285Fast seek function is also applied to <tt>f_read</tt> and <tt>f_write</tt>.<br> 286<tt>f_lseek</tt> reports required table size on creating CLMP.<br> 287Extended format syntax of <tt>f_printf</tt>.<br> 288Ignores duplicated directory separators in given path names.<br> 289</td> 290<td> 291</td> 292</tr> 293<tr> 294<td>R0.08a<br>Aug 16, 2010</td> 295<td> 296Added <tt>f_getcwd</tt>. (<tt>_FS_RPATH = 2</tt>)<br> 297Added sector erase function. (<tt>_USE_ERASE</tt>)<br> 298Moved file lock semaphore table from fs object to the bss.<br> 299Fixed <tt>f_mkdir</tt> creates wrong directory on non-LFN cfg when the given name contains <tt>';'</tt>.<br> 300Fixed <tt>f_mkfs</tt> creates wrong FAT32 volume.<br> 301</td> 302<td> 303</td> 304</tr> 305<tr> 306<td>R0.08<br>May 15, 2010</td> 307<td> 308Added an option to <tt>_USE_LFN</tt><br> 309Added support of file lock. (<tt>_FS_SHARE</tt>)<br> 310Added fast seek function. (<tt>_USE_FASTSEEK</tt>)<br> 311Changed a type name on the API, <tt>XCHAR</tt> to <tt>TCHAR</tt>.<br> 312Changed member, <tt>fname</tt>, in the <tt>FILINFO</tt> on Unicode cfg.<br> 313String functions support UTF-8 encoding files on Unicode cfg.<br> 314</td> 315<td> 316</td> 317</tr> 318<tr> 319<td>R0.07e<br>Nov 3, 2009</td> 320<td> 321Separated out configuration options from <tt>ff.h</tt> to <tt>ffconf.h</tt>.<br> 322Added a configuration option, <tt>_LFN_UNICODE</tt>.<br> 323Fixed <tt>f_unlink</tt> fails to remove a sub-dir on <tt>_FS_RPATH</tt>.<br> 324Fixed name matching error on the 13 char boundary.<br> 325Changed <tt>f_readdir</tt> to return the SFN with always upper case on non-LFN cfg.<br> 326</td> 327<td> 328</td> 329</tr> 330<tr> 331<td>R0.07c<br>Jan 21, 2009</td> 332<td> 333Fixed <tt>f_unlink</tt> may return FR_OK on error.<br> 334Fixed wrong cache control in <tt>f_lseek</tt>.<br> 335Added support of relative path.<br> 336Added <tt>f_chdir</tt>.<br> 337Added <tt>f_chdrive</tt>.<br> 338Added proper case conversion to extended characters.<br> 339</td> 340<td> 341</td> 342</tr> 343<tr> 344<td>R0.07a<br>Apr 14, 2009</td> 345<td> 346Separated out OS dependent code on re-entrant configuration.<br> 347Added multiple sector size support.<br> 348</td> 349<td> 350</td> 351</tr> 352<tr> 353<td>R0.07<br>Apr 1, 2009</td> 354<td> 355Merged Tiny-FatFs into FatFs as a buffer configuration option.<br> 356Added support for long file extension.<br> 357Added multiple code page support.<br> 358Added re-entrancy for multitask operation.<br> 359Added auto cluster size selection to <tt>f_mkfs</tt>.<br> 360Added rewind option to <tt>f_readdir</tt>.<br> 361Changed result code of critical errors.<br> 362Renamed string functions to avoid name collision.<br> 363</td> 364<td> 365</td> 366</tr> 367<tr> 368<td>R0.06<br>Apr 1, 2008</td> 369<td> 370Added <tt>f_forward</tt>. (Tiny-FatFs)<br> 371Added string functions: <tt>f_gets</tt>, <tt>f_putc</tt>, <tt>f_puts</tt> and <tt>f_printf</tt>.<br> 372Improved performance of <tt>f_lseek</tt> on moving to the same or following cluster.<br> 373</td> 374<td> 375</td> 376</tr> 377<tr> 378<td>R0.05a<br>Feb 3, 2008</td> 379<td> 380Added <tt>f_truncate</tt>.<br> 381Added <tt>f_utime</tt>.<br> 382Fixed off by one error at FAT sub-type determination.<br> 383Fixed btr in <tt>f_read</tt> can be mistruncated.<br> 384Fixed cached sector is left not flushed when create and close without write.<br> 385</td> 386<td> 387</td> 388</tr> 389<tr> 390<td>R0.05<br>Aug 26, 2007</td> 391<td> 392Changed arguments of <tt>f_read</tt>, <tt>f_write</tt>.<br> 393Changed arguments of <tt>f_mkfs</tt>. (FatFs)<br> 394Fixed <tt>f_mkfs</tt> on FAT32 creates incorrect FSInfo. (FatFs)<br> 395Fixed <tt>f_mkdir</tt> on FAT32 creates broken directory. (FatFs)<br> 396</td> 397<td> 398</td> 399</tr> 400<tr> 401<td>R0.04b<br>May 5, 2007</td> 402<td> 403Added <tt>_USE_NTFLAG</tt> option.<br> 404Added support for FSInfo in FAT32 volume.<br> 405Fixed some problems corresponds to FAT32. (Tiny-FatFs)<br> 406Fixed DBCS name can result <tt>FR_INVALID_NAME</tt>.<br> 407Fixed short seek (<tt><= csize</tt>) collapses the file object.<br> 408</td> 409<td> 410</td> 411</tr> 412<tr> 413<td>R0.04a<br>Apr 1, 2007</td> 414<td> 415Supported multiple partitions on a plysical drive. (FatFs)<br> 416Added minimization level 3.<br> 417Added a capability of extending file size to <tt>f_lseek</tt>.<br> 418Fixed an endian sensitive code in <tt>f_mkfs</tt>. (FatFs)<br> 419Fixed a problem corresponds to FAT32 support. (Tiny-FatFs)<br> 420</td> 421<td> 422</td> 423</tr> 424<tr> 425<td>R0.04<br>Feb 4, 2007</td> 426<td> 427Supported multiple drive system. (FatFs)<br> 428Changed some APIs for multiple drive system.<br> 429Added <tt>f_mkfs</tt>. (FatFs)<br> 430Added <tt>_USE_FAT32</tt> option. (Tiny-FatFs)<br> 431</td> 432<td> 433</td> 434</tr> 435<tr> 436<td>R0.03a<br>Dec 11, 2006</td> 437<td> 438Improved cluster scan algolithm to write files fast.<br> 439Fixed <tt>f_mkdir</tt> creates broken directory on FAT32.<br> 440</td> 441<td> 442</td> 443</tr> 444<tr> 445<td>R0.03<br>Sep 22, 2006</td> 446<td> 447Added <tt>f_rename</tt>. 448Changed option <tt>_FS_MINIMUM</tt> to <tt>_FS_MINIMIZE</tt>.<br> 449</td> 450<td> 451</td> 452</tr> 453<tr> 454<td>R0.02a<br>Jun 10, 2006</td> 455<td> 456Added a configuration option <tt>_FS_MINIMUM</tt>.<br> 457</td> 458<td> 459</td> 460</tr> 461<tr> 462<td>R0.02<br>Jun 01, 2006</td> 463<td> 464Added FAT12.<br> 465Removed unbuffered mode.<br> 466Fixed a problem on small (<tt><32M</tt>) patition.<br> 467</td> 468<td> 469</td> 470</tr> 471<tr> 472<td>R0.01<br>Apr 29, 2006</td> 473<td> 474First release.<br> 475</td> 476<td> 477</td> 478</tr> 479</table> 480</body> 481</html> 482