SchOS/include/fat.h
Nexoniarz b336e4a566 vfs: room for 32 disks and partitions, 32 mounts, 16 SchFS volumes
NBLKDEV was 16 for every disk and partition together, which a laptop's
NVMe drive with its eight partitions and a USB stick come close to. The
mount table held 8, SchFS 4 volumes and 4 snapshots, FAT 4 volumes.
Now 32, 32, 16, 8 and 8; the device numbers still fit between the ones
already fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
2026-10-23 12:19:50 +02:00

30 lines
1.4 KiB
C

#pragma once
// FAT12, FAT16 and FAT32, with VFAT long names: the filesystem every other
// operating system can read, which is the whole reason to have it. A USB
// stick, an EFI system partition, an SD card. See kernel/fs/fat/fat.c.
//
// Mounted the way Linux mounts it -- `mount -t vfat /dev/usb0p1 /mnt` -- and
// "msdos" and "fat" are accepted as the same thing.
// Filesystem device numbers for mounted FAT volumes. Like SCHFS_DEV, runtime
// identities for the inode cache that nothing on disk records.
#define FAT_VOL_SLOTS 8 // 104..111
#define FAT_DEV 104
#define FAT_IS_DEV(d) ((d) >= FAT_DEV && (d) < FAT_DEV + FAT_VOL_SLOTS)
// The root directory's inode number on every FAT volume.
#define FAT_ROOT_INO 1
// Mount the FAT volume on block device `bdev`. Returns its filesystem device
// number, or a negative errno: -ENODEV for no FAT there, -EBUSY for no free
// slot or already mounted.
int fat_kmount(uint bdev, int readonly);
// Flush it, mark it cleanly unmounted, and let it go.
int fat_kumount(uint dev);
int fat_readonly(uint dev);
// Write out everything dirty on every mounted volume. `final` also marks each
// one clean, for a shutdown that will not get to unmount them.
void fat_ksync_all(int final);
// Cluster size, clusters and free clusters, for statfs. -1 if not FAT.
int fat_kstatfs(uint dev, uint64 *bsize, uint64 *total, uint64 *freec);