pang-o-lin/include/fat12-internals.h

53 lines
1.1 KiB
C

#ifndef FAT12_INTERNALS_H__
#define FAT12_INTERNALS_H__
struct fat_directory_entry {
uint8_t file_name[8];
uint8_t extension[3];
uint8_t file_attributes;
uint8_t reserved1;
uint8_t ctime_ms;
uint8_t ctime_hms[2];
uint8_t ctime_date[2];
uint8_t atime_date[2];
uint8_t ea_index[2];
uint8_t mtime_hms[2];
uint8_t mtime_date[2];
uint8_t first_cluster[2];
uint8_t file_size[4];
};
struct fat12_partition
{
struct pang_io *io;
// Number of bytes in a sector (512)
uint32_t sector_size;
uint8_t sector_buffer[512];
// These units are "sectors"
uint32_t fat_offset;
uint32_t fat_size;
uint32_t root_offset;
uint32_t first_offset;
uint32_t cluster_size;
// These are in single-unit quantities
uint32_t root_entries;
uint32_t cluster_count;
uint32_t cluster_bytes;
uint32_t sector_count;
void *fat;
uint16_t *taf;
};
enum fat_attributes {
FAT_ATTR_DIR = 0x10,
FAT_ATTR_FILE = 0x20,
};
uint32_t fat12_find_free_cluster(struct fat12_partition *part, uint32_t start);
#endif /* FAT12_INTERNALS_H__ */