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;
161#ifdef ARCH_X64
162 AuMutex *fat_mutex;
163 AuMutex *fat_write_mutex;
164 AuMutex *fat_read_mutex;
165#endif
167
168
169
170/*
171* FatInitialise -- initialise the fat file system
172* @param vdisk -- Pointer to vdisk structure
173* @param mountpoint -- mount point name
174*/
175extern AuVFSNode* FatInitialise(AuVDisk *vdisk, char* mountpoint);
176
177/*
178* FatClusterToSector32 -- Converts a cluster to sector
179* @param cluster -- cluster number
180*/
181extern uint64_t FatClusterToSector32(FatFS *fs, uint64_t cluster);
182
190extern void FatToDOSFilename(const char* filename, char* fname, unsigned int fname_length);
191
192/*
193 * FatCalculateCheckSum -- returns an unsigned byte checksum computed on an
194 * unsigned byte array. The array must be 11 bytes long and is assumed to
195 * contain a name stored in the format of a MS-DOS directory entry
196 * @param filename -- Pointer to an unsigned byte array assumed to be
197 * 11 bytes long
198 */
199extern uint8_t FatCalculateCheckSum(uint8_t* filename);
200
201/*
202 * FatCheckDotCount -- checks the number of '.' dot
203 * count in a given filename
204 * @param filename -- name of the file to check
205 */
206extern uint8_t FatCheckDotCount(char* filename);
207
208/*
209* FatFindFreeCluster -- finds a free cluster from FAT
210* data structure
211* @param node -- fs node
212*/
214
215/*
216* FatAllocCluster -- allocates a cluster by writing
217* n_value
218* @param fsys -- Pointer to file system node
219* @param position -- position of the cluster
220* @param n_value -- value to write
221*/
222extern void FatAllocCluster(AuVFSNode* fsys, int position, uint32_t n_value);
223
228extern void FatClearCluster(AuVFSNode* node, uint32_t cluster);
229
230/*
231* FatReadFAT -- read the file allocation table
232* @param vdisk -- pointer to vdisk
233* @param cluster_index -- index of the cluster
234*/
235extern uint32_t FatReadFAT(AuVFSNode *node, uint64_t cluster_index);
236
240extern AuVFSNode * FatOpen(AuVFSNode * fsys, char* filename);
241
242/*
243* FatFormatDate -- returns fat formated date stamp
244*/
245extern uint16_t FatFormatDate();
246
247/*
248* FatFormatTime -- returns fat formated time stamp
249*/
250extern uint16_t FatFormatTime();
251
252
253AuVFSNode* FatLocateDir(AuVFSNode* fsys, const char* dir);
254
255AuVFSNode* FatLocateSubDir(AuVFSNode* fsys, AuVFSNode* kfile, const char* filename);
256
257/*
258* FatFromDosToFilename -- converts fat directoy entry filename
259* to human readable filename
260*/
261extern void FatFromDosToFilename(char* filename, char* dirfname);
262
263#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
void * _scratchBuffer
Definition Fat.h:160
Definition vdisk.h:72
Definition vfs.h:98
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