更新及迁移说明

版本更新内容迁移说明
R0.16
2025年7月22日
  • 移除了一个长期存在的限制,即 `f_getcwd` 和路径名中的双点 `".."` 在 exFAT 卷上不起作用。
  • 修复了 `f_readdir` 无法检测到目录末尾,导致应用程序陷入无限循环的问题。(出现于 R0.15b)
  • 修复了在未启用 LFN 时,以分隔符结尾或包含重复分隔符的点名称被拒绝的问题。
  • 当启用相对路径时,exFAT 卷上的子目录最大深度被限制为配置的级别 `FF_PATH_DEPTH`。
R0.15b
2025年6月21日
  • 增加了对创建时间时间戳的支持。(FF_FS_CRTIME)
  • 修复了 FatFs 加载 FAT32 卷中的 FsInfo 失败,导致 `f_getfree` 总是强制进行完整的 FAT 扫描,从而耗费很长时间的问题。(出现于 R0.15a)
  • 对 `f_utime` 函数进行了少量更改,以支持创建时间的时间戳。
R0.15a
2024年11月22日
  • 修复了当 `FF_FS_LOCK != 0` 时的编译错误。(出现于 R0.15)
  • 修复了在 `FF_FS_REENTRANT`、`FF_VOLUMES >= 2` 和 `FF_FS_LOCK > 0` 条件下并发使用 FatFs 时的潜在问题。
  • 使 `f_setlabel` 在 `FF_STR_VOLUME_ID == 2` 时接受带有 Unix 风格卷 ID 的卷标。
  • 使 FatFs 更新 exFAT VBR 中的 `PercInUse` 字段。(为保证准确性,需要在此之前调用 `f_getfree`)
R0.15
2022年11月6日
  • 更改了用户提供的同步函数,以便从 FatFs 代码中完全消除平台依赖性。
  • 修复了在 `FF_FS_REENTRANT` 条件下 `f_mount` 中的一个潜在错误。
  • 修复了当 `FF_FS_REENTRANT && FF_VOLUMES > 1` 为真时,文件锁控制 `FF_FS_LOCK` 没有互斥的问题。
  • 修复了当卷大小 `>= 2^32` 个扇区时,`f_mkfs` 创建损坏的 exFAT 卷的问题。
  • 修复了当 `FF_LFN_UNICODE == 2` (UTF-8) 时,字符串函数无法写入非 BMP(基本多文种平面)的 Unicode 字符的问题。
  • 修复了 GPT 头识别中的一个兼容性问题。
  • 当 `FF_FS_REENTRANT` 时,用户需要提供的同步函数 `ff_cre_syncobj`、`ff_del_syncobj`、`ff_req_grant` 和 `ff_rel_grant` 分别被替换为 `ff_mutex_create`、`ff_mutex_delete`、`ff_mutex_take` 和 `ff_mutex_give`。示例请参见 `ffsystem.c`。
  • 从配置选项中移除了 `FF_SYNC_t`。
R0.14b
2021年4月17日
  • 使 FatFs 使用标准库 `string.h` 进行复制、比较和搜索,而不是内置的字符串函数。
  • 为 `f_printf` 添加了对 long long 整数和浮点数的支持。(FF_STRF_LLIFF_STRF_FP)
  • 使路径名解析器忽略结尾的分隔符,以允许 `"dir/"` 这种形式。
  • 改进了 Unix 风格路径名功能的兼容性。
  • 修复了在特定条件下 `f_open` 失败时文件陷入死锁的问题。(出现于 R0.12a)
  • 修复了 `f_mkfs` 可能因时序依赖错误而创建错误 exFAT 卷的问题。(出现于 R0.12)
  • 修复了 `f_setcp` 无法设置代码页 855 的问题。(出现于 R0.13)
  • 修复了一些编译器警告。
  • 从这个版本开始,FatFs 依赖于 `string.h`。
R0.14a
2020年12月5日
  • 限制了 `f_findnext` 中的递归调用次数,以防止堆栈溢出。
  • 修复了使用 MS-DOS 2.x 和 3.x 格式化的旧软盘无法挂载的问题。
  • 修复了一些编译器警告。
  • `f_findfirst` 中匹配模式的通配符数量限制为 4 个。
R0.14
2019年10月14日
  • 增加了对 64 位 LBA 和 GUID 分区表的支持 (FF_LBA64)
  • 更改了一些 API 函数,`f_mkfs` 和 `f_fdisk`。
  • 修复了 `f_open` 无法找到长度为 `FF_MAX_LFN` 个字符的文件名的问题。
  • 修复了 `f_readdir` 无法检索长度为 `FF_MAX_LFN - 1` 个字符的长文件名的问题。
  • 修复了 `f_readdir` 返回大小写转换错误的文件名的问题。(出现于 R0.12)
  • 修复了 `f_mkfs` 在第二个分区创建 exFAT 卷可能失败的问题。(出现于 R0.12)
  • `f_mkfs` 和 `f_fdisk` 的用法已更改,并为这些函数添加了一些新功能。
R0.13c
2018年10月14日
  • 为 C99 及更高版本添加了对 `stdint.h` 的支持。(integer.h 曾被包含在 ff.h 中)
  • 修复了当最后一个目录条目不为空时,读取目录会进入无限循环的问题。(出现于 R0.12)
  • 修复了在 exFAT 卷的碎片化子目录中创建子目录会破坏父目录 FAT 链的问题。(出现于 R0.12)
  • 修复了当缓冲区包含有效的驱动器号时,`f_getcwd` 会导致输出缓冲区溢出的问题。(出现于 R0.13b)
  • 从这个版本开始,FatFs 在 C99 或更高版本中依赖于 `stdint.h`。
  • 移除了 `integer.h`。
R0.13b
2018年4月7日
  • 在 API 上增加了对 UTF-32 编码的支持。(FF_LFN_UNICODE = 3)
  • 增加了对 Unix 风格卷前缀的支持。(FF_STR_VOLUME_ID = 2)
  • 修复了访问 exFAT 根目录中超出簇边界的对象可能失败的问题。(出现于 R0.12c)
  • 修复了 `f_setlabel` 没有拒绝某些无效字符的问题。(出现于 R0.09b)
R0.13a
2017年10月14日
  • 在 API 上增加了对 UTF-8 编码的支持。(FF_LFN_UNICODE = 2)
  • 为文件名输出缓冲区添加了选项。(FF_LFN_BUF, FF_SFN_BUF)
  • 为 `f_mkfs` 和 `f_fdisk` 的工作缓冲区添加了动态内存分配选项。
  • 修复了 `f_fdisk` 和 `f_mkfs` 创建具有错误 CHS 参数的分区表的问题。(出现于 R0.09)
  • 修复了 `f_unlink` 在 exFAT 卷的碎片文件上可能导致簇丢失的问题。(出现于 R0.12c)
  • 修复了 `f_setlabel` 拒绝某些对 exFAT 卷有效的字符的问题。(出现于 R0.12)
R0.13
2017年5月21日
  • 配置项名称的前缀从 `"_"` 更改为 `"FF_"`。
  • 添加了 `f_setcp`,用于运行时代码页配置。(FF_CODE_PAGE = 0)
  • 改进了在扩展深层簇链时的簇分配时间。
  • 通过使用 `FF_USE_LFN = 3`,改进了 `f_mkdir` 在大簇尺寸下的处理时间。
  • 改进了 exFAT 的 `NoFatChain` 标志,在碎片文件被截断并变得连续后进行设置。
  • 修复了重命名 exFAT 卷上的文件时,存档属性未被设置的问题。(出现于 R0.12)
  • 修复了对现有文件进行写或 lseek 操作时,exFAT 的 FAT 条目可能被破坏的问题。(出现于 R0.12c)
  • 修复了当对 exFAT 目录进行新的簇分配时,创建文件可能失败的问题。(出现于 R0.12c)
  • 仅 ASCII 配置 `FF_CODE_PAGE = 1` 已被移除。请改用 `FF_CODE_PAGE = 437`。

返回 | 赣ICP备2025058913号-1