essence-os/shared/fat.cpp

59 lines
1.3 KiB
C++

struct SuperBlockCommon {
uint8_t jmp[3];
uint8_t oemName[8];
uint16_t bytesPerSector;
uint8_t sectorsPerCluster;
uint16_t reservedSectors;
uint8_t fatCount;
uint16_t rootDirectoryEntries;
uint16_t totalSectors;
uint8_t mediaDescriptor;
uint16_t sectorsPerFAT16;
uint16_t sectorsPerTrack;
uint16_t heads;
uint32_t hiddenSectors;
uint32_t largeSectorCount;
} ES_STRUCT_PACKED;
struct SuperBlock16 : SuperBlockCommon {
uint8_t deviceID;
uint8_t flags;
uint8_t signature;
uint32_t serial;
uint8_t label[11];
uint64_t systemIdentifier;
uint8_t _unused1[450];
} ES_STRUCT_PACKED;
struct SuperBlock32 : SuperBlockCommon {
uint32_t sectorsPerFAT32;
uint16_t flags;
uint16_t version;
uint32_t rootDirectoryCluster;
uint16_t fsInfoSector;
uint16_t backupBootSector;
uint8_t _unused0[12];
uint8_t deviceID;
uint8_t flags2;
uint8_t signature;
uint32_t serial;
uint8_t label[11];
uint64_t systemIdentifier;
uint8_t _unused1[422];
} ES_STRUCT_PACKED;
struct FATDirectoryEntry {
uint8_t name[11];
uint8_t attributes;
uint8_t _reserved0;
uint8_t creationTimeSeconds;
uint16_t creationTime;
uint16_t creationDate;
uint16_t accessedDate;
uint16_t firstClusterHigh;
uint16_t modificationTime;
uint16_t modificationDate;
uint16_t firstClusterLow;
uint32_t fileSizeBytes;
} ES_STRUCT_PACKED;