Add FAT32 support

This commit is contained in:
2025-11-19 15:54:17 +01:00
parent a05e73e69a
commit b4d6315dea

View File

@ -104,6 +104,31 @@ int32_t vfs_init_fat16(VfsMountPoint *mp, bool format) {
return E_OK; return E_OK;
} }
int32_t vfs_init_fat32(VfsMountPoint *mp, bool format) {
mp->fs.fatfs.instance.extra = mp;
fl_init(&mp->fs.fatfs.instance);
int err = fl_attach_media(&mp->fs.fatfs.instance, &portfatfs_diskio_read, &portfatfs_diskio_write);
if (err != FAT_INIT_OK) {
ERR("vfs", "FAT32 mount failed %d\n", err);
return E_MOUNTERR;
}
if (format) {
fatfs_format_fat32(&mp->fs.fatfs.instance,
&mp->fs.fatfs.instance._fs,
mp->backingsd->capacity(mp->backingsd) / FAT_SECTOR_SIZE,
"MOP2 FAT32"
);
}
mp->cleanup = &fatfs_cleanup;
mp->open = &fatfs_open;
mp->stat = &fatfs_stat;
mp->fetchdirent = &fatfs_fetchdirent;
mp->mkdir = &fatfs_mkdir;
mp->delete = &fatfs_delete;
return E_OK;
}
int32_t vfs_stat(char *mountpoint, const char *path, FsStat *stat) { int32_t vfs_stat(char *mountpoint, const char *path, FsStat *stat) {
VfsMountPoint *mp = NULL; VfsMountPoint *mp = NULL;
@ -188,6 +213,9 @@ int32_t vfs_mount(char *mountpoint, int32_t fstype, StoreDev *backingsd, bool fo
case VFS_FAT16: case VFS_FAT16:
err = vfs_init_fat16(mp, format); err = vfs_init_fat16(mp, format);
break; break;
case VFS_FAT32:
err = vfs_init_fat32(mp, format);
break;
default: default:
return E_UNKNOWN_FSTYPE; return E_UNKNOWN_FSTYPE;
} }