XenevaOS
Loading...
Searching...
No Matches
Fat.h
Go to the documentation of this file.
1
30#ifndef __FAT_H__
31#define __FAT_H__
32
33#include <stdint.h>
34#include <Fs/vdisk.h>
35#ifdef ARCH_X64
36#include <Sync/mutex.h>
37#endif
38#include <Fs/vfs.h>
39
40#define FAT_ATTRIBUTE_MASK 0x3F
41#define FAT_ATTRIBUTE_READ_ONLY 0x01
42#define FAT_ATTRIBUTE_HIDDEN 0x02
43#define FAT_ATTRIBUTE_SYSTEM 0x04
44#define FAT_ATTRIBUTE_VOLUME 0x08
45#define FAT_ATTRIBUTE_DIRECTORY 0x10
46#define FAT_ATTRIBUTE_ARCHIVE 0x20
47#define FAT_ATTRIBUTE_LONG_NAME 0x0F
48
49#define FAT_EOC_MARK 0xFFFFFFF8
50#define FAT_BAD_CLUSTER 0xFFFFFFF7
51
52
53#ifdef ARCH_X64
54#pragma pack(push,1)
55#endif
56/* FAT BPB */
57typedef struct _FAT_BPB_ {
59 char oemid[8]; //0x03 -- 8
63 uint8_t num_fats; //0x010 1
69 uint16_t heads; //0x01A 2
72 union {
73 struct {
78 char vol_label[11];
79 char sys_id[8];
81
82 struct {
84 uint16_t falgs; //0x028 2
89 uint8_t reserved[12]; //0x034 12
92 uint8_t signature; //0x042 1
93 uint32_t vol_serial_num; //0x043 4
94 char vol_label[11]; //0x047 11
95 char sys_id[8]; //0x052 8
99#ifdef ARCH_X64
100#pragma pack(pop)
101#endif
102
104#pragma pack (push, 1)
120#pragma pack(pop)
121
122/*
123 * Long file name entry
124 */
125#pragma pack(push,1)
136#pragma pack(pop)
137
138#define FSTYPE_FAT12 1
139#define FSTYPE_FAT16 2
140#define FSTYPE_FAT32 3
141
142
143typedef struct _FatFS_ {
146 char oemid[8];
148 unsigned long __FatBeginLBA;
149 unsigned long __ClusterBeginLBA;
150 unsigned char __SectorPerCluster;
152 unsigned long __RootSector;
153 unsigned int __SectorPerFAT32;
154 unsigned int __TotalClusters;
155 unsigned char* __RootDirCache;
156 unsigned int __LastIndexSector;
157 unsigned int __LastIndexInFat;
160#ifdef ARCH_X64
161 AuMutex *fat_mutex;
162 AuMutex *fat_write_mutex;
163 AuMutex *fat_read_mutex;
164#endif
166
167
168
169/*
170* FatInitialise -- initialise the fat file system
171* @param vdisk -- Pointer to vdisk structure
172* @param mountpoint -- mount point name
173*/
174extern AuVFSNode* FatInitialise(AuVDisk *vdisk, char* mountpoint);
175
176/*
177* FatClusterToSector32 -- Converts a cluster to sector
178* @param cluster -- cluster number
179*/
180extern uint64_t FatClusterToSector32(FatFS *fs, uint64_t cluster);
181
189extern void FatToDOSFilename(const char* filename, char* fname, unsigned int fname_length);
190
191/*
192 * FatCalculateCheckSum -- returns an unsigned byte checksum computed on an
193 * unsigned byte array. The array must be 11 bytes long and is assumed to
194 * contain a name stored in the format of a MS-DOS directory entry
195 * @param filename -- Pointer to an unsigned byte array assumed to be
196 * 11 bytes long
197 */
198extern uint8_t FatCalculateCheckSum(uint8_t* filename);
199
200/*
201 * FatCheckDotCount -- checks the number of '.' dot
202 * count in a given filename
203 * @param filename -- name of the file to check
204 */
205extern uint8_t FatCheckDotCount(char* filename);
206
207/*
208* FatFindFreeCluster -- finds a free cluster from FAT
209* data structure
210* @param node -- fs node
211*/
213
214/*
215* FatAllocCluster -- allocates a cluster by writing
216* n_value
217* @param fsys -- Pointer to file system node
218* @param position -- position of the cluster
219* @param n_value -- value to write
220*/
221extern void FatAllocCluster(AuVFSNode* fsys, int position, uint32_t n_value);
222
227extern void FatClearCluster(AuVFSNode* node, uint32_t cluster);
228
229/*
230* FatReadFAT -- read the file allocation table
231* @param vdisk -- pointer to vdisk
232* @param cluster_index -- index of the cluster
233*/
234extern uint32_t FatReadFAT(AuVFSNode *node, uint64_t cluster_index);
235
239extern AuVFSNode * FatOpen(AuVFSNode * fsys, char* filename);
240
241/*
242* FatFormatDate -- returns fat formated date stamp
243*/
244extern uint16_t FatFormatDate();
245
246/*
247* FatFormatTime -- returns fat formated time stamp
248*/
249extern uint16_t FatFormatTime();
250
251
252AuVFSNode* FatLocateDir(AuVFSNode* fsys, const char* dir);
253
254AuVFSNode* FatLocateSubDir(AuVFSNode* fsys, AuVFSNode* kfile, const char* filename);
255
256/*
257* FatFromDosToFilename -- converts fat directoy entry filename
258* to human readable filename
259*/
260extern void FatFromDosToFilename(char* filename, char* dirfname);
261
262#endif
struct _FAT_BPB_ FatBPB
uint16_t FatFormatTime()
Definition Fat.cpp:675
uint64_t FatClusterToSector32(FatFS *fs, uint64_t cluster)
Definition Fat.cpp:62
void FatToDOSFilename(const char *filename, char *fname, unsigned int fname_length)
Definition Fat.cpp:73
AuVFSNode * FatLocateDir(AuVFSNode *fsys, const char *dir)
Definition Fat.cpp:425
uint8_t FatCheckDotCount(char *filename)
Definition Fat.cpp:127
AuVFSNode * FatOpen(AuVFSNode *fsys, char *filename)
Definition Fat.cpp:490
AuVFSNode * FatInitialise(AuVDisk *vdisk, char *mountpoint)
Definition Fat.cpp:585
void FatFromDosToFilename(char *filename, char *dirfname)
Definition Fat.cpp:140
void FatClearCluster(AuVFSNode *node, uint32_t cluster)
Definition Fat.cpp:272
void FatAllocCluster(AuVFSNode *fsys, int position, uint32_t n_value)
Definition Fat.cpp:238
AuVFSNode * FatLocateSubDir(AuVFSNode *fsys, AuVFSNode *kfile, const char *filename)
Definition Fat.cpp:365
uint32_t FatReadFAT(AuVFSNode *node, uint64_t cluster_index)
Definition Fat.cpp:168
struct _fat_lfn_ FatLFN
uint32_t FatFindFreeCluster(AuVFSNode *node)
Definition Fat.cpp:193
struct _fat_dir_ FatDir
uint8_t FatCalculateCheckSum(uint8_t *filename)
Definition Fat.cpp:114
struct _FatFS_ FatFS
uint16_t FatFormatDate()
Definition Fat.cpp:668
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
Definition Fat.h:57
uint8_t num_fats
Definition Fat.h:63
uint8_t media_type
Definition Fat.h:66
uint16_t falgs
Definition Fat.h:84
uint16_t sectors_per_track
Definition Fat.h:68
uint16_t bytes_per_sector
Definition Fat.h:60
uint16_t fs_info_sect
Definition Fat.h:87
struct _FAT_BPB_::@13::@14 FAT16
uint16_t fat_version
Definition Fat.h:85
union _FAT_BPB_::@13 info
uint32_t hidden_sectors
Definition Fat.h:70
uint32_t sect_per_fat32
Definition Fat.h:83
char sys_id[8]
Definition Fat.h:79
uint8_t signature
Definition Fat.h:76
uint8_t drive_number
Definition Fat.h:90
uint8_t jmp[3]
Definition Fat.h:58
uint8_t flagsWinNT
Definition Fat.h:91
uint16_t backup_boot_sect
Definition Fat.h:88
uint8_t drive_num
Definition Fat.h:74
char oemid[8]
Definition Fat.h:59
uint8_t WinNtFlags
Definition Fat.h:75
uint32_t root_dir_cluster
Definition Fat.h:86
struct _FAT_BPB_::@13::@15 FAT32
uint32_t vol_serial_num
Definition Fat.h:77
uint16_t heads
Definition Fat.h:69
uint16_t sectors_per_fat
Definition Fat.h:67
uint16_t num_dir_entries
Definition Fat.h:64
uint8_t sectors_per_cluster
Definition Fat.h:61
uint16_t reserved_sectors
Definition Fat.h:62
uint32_t large_sector_count
Definition Fat.h:71
uint16_t total_sectors_short
Definition Fat.h:65
uint8_t reserved[12]
Definition Fat.h:89
char vol_label[11]
Definition Fat.h:78
Definition Fat.h:143
unsigned long __FatBeginLBA
Definition Fat.h:148
unsigned char * __RootDirCache
Definition Fat.h:155
unsigned int __LastIndexSector
Definition Fat.h:156
unsigned long __ClusterBeginLBA
Definition Fat.h:149
unsigned long __RootSector
Definition Fat.h:152
unsigned char __SectorPerCluster
Definition Fat.h:150
uint8_t fatType
Definition Fat.h:147
size_t cluster_sz_in_bytes
Definition Fat.h:159
uint16_t __BytesPerSector
Definition Fat.h:158
unsigned int __LastIndexInFat
Definition Fat.h:157
AuVDisk * vdisk
Definition Fat.h:145
FatBPB * bpb
Definition Fat.h:144
unsigned int __SectorPerFAT32
Definition Fat.h:153
unsigned int __TotalClusters
Definition Fat.h:154
unsigned int __RootDirFirstCluster
Definition Fat.h:151
char oemid[8]
Definition Fat.h:146
Definition vdisk.h:72
Definition vfs.h:89
Definition Fat.h:106
uint16_t date_last_accessed
Definition Fat.h:113
uint16_t first_cluster_hi_bytes
Definition Fat.h:114
uint8_t reserved
Definition Fat.h:109
uint8_t filename[11]
Definition Fat.h:107
uint32_t file_size
Definition Fat.h:118
uint16_t date_created
Definition Fat.h:112
uint16_t last_wrt_date
Definition Fat.h:116
uint8_t attrib
Definition Fat.h:108
uint16_t time_created
Definition Fat.h:111
uint16_t first_cluster
Definition Fat.h:117
uint16_t last_wrt_time
Definition Fat.h:115
uint8_t time_created_ms
Definition Fat.h:110
Definition Fat.h:126
uint8_t checkSum
Definition Fat.h:131
uint8_t type
Definition Fat.h:130
uint8_t attrib
Definition Fat.h:129
uint8_t nameOne[10]
Definition Fat.h:128
uint8_t nameTwo[12]
Definition Fat.h:132
uint8_t nameThree[4]
Definition Fat.h:134
uint8_t order
Definition Fat.h:127
uint16_t FstClusterLo
Definition Fat.h:133
Definition mutex.h:40