diff --git a/lib/oofatfs/ff.c b/lib/oofatfs/ff.c index 12790c04a3..bc301f3ed4 100644 --- a/lib/oofatfs/ff.c +++ b/lib/oofatfs/ff.c @@ -5422,7 +5422,8 @@ FRESULT f_mkfs ( ) { const UINT n_fats = 1; /* Number of FATs for FAT/FAT32 volume (1 or 2) */ - const UINT n_rootdir = 512; /* Number of root directory entries for FAT volume */ + // CIRCUITPY-CHANGE: Make number of root directory entries changeable. See below. + UINT n_rootdir = 512; /* Default number of root directory entries for FAT volume */ static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0}; /* Cluster size boundary for FAT volume (4Ks unit) */ #if FF_MKFS_FAT32 static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0}; /* Cluster size boundary for FAT32 volume (128Ks unit) */ @@ -5703,6 +5704,11 @@ FRESULT f_mkfs ( } sz_fat = (n + ss - 1) / ss; /* FAT size [sector] */ sz_rsv = 1; /* Number of reserved sectors */ + // CIRCUITPY-CHANGE: For fewer than 256 clusters (128kB filesystem), + // shrink the root directory size from 512 entries to 128 entries. Note that + // long filenames will use two entries. This change affects only the root directory, + // not subdirectories + n_rootdir = (sz_vol <= 256) ? 128 : n_rootdir; sz_dir = (DWORD)n_rootdir * SZDIRE / ss; /* Rootdir size [sector] */ } b_fat = b_vol + sz_rsv; /* FAT base */ diff --git a/tests/extmod/vfs_blockdev.py.exp b/tests/extmod/vfs_blockdev.py.exp index a254133131..1833a42f04 100644 --- a/tests/extmod/vfs_blockdev.py.exp +++ b/tests/extmod/vfs_blockdev.py.exp @@ -1,5 +1,5 @@ test -(512, 512, 16, 16, 16, 0, 0, 0, 0, 255) +(512, 512, 40, 40, 40, 0, 0, 0, 0, 255) [('test', 32768, 0, 90)] some datasome datasome datasome datasome datasome datasome datasome datasome datasome data test diff --git a/tests/extmod/vfs_fat_ramdisk.py.exp b/tests/extmod/vfs_fat_ramdisk.py.exp index 5407014d5f..ac45b4b375 100644 --- a/tests/extmod/vfs_fat_ramdisk.py.exp +++ b/tests/extmod/vfs_fat_ramdisk.py.exp @@ -1,7 +1,7 @@ True True label: LABEL TEST -statvfs: (512, 512, 16, 16, 16, 0, 0, 0, 0, 255) +statvfs: (512, 512, 40, 40, 40, 0, 0, 0, 0, 255) getcwd: / True [('foo_file.txt', 32768, 0, 6)]