net: tcp_client_socket connection state routines
[quarnos.git] / resources / fat.h
blobb480821902df1cac455ca52ecf7588898aea045d
1 /* Quarn OS
3 * FAT filesystem
5 * Copyright (C) 2008-2009 Pawel Dziepak
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #include "fs.h"
24 #include "arch/low/general.h"
25 #include "libs/string.h"
27 namespace resources {
28 class fat : public fs {
29 private:
30 enum fat_attribs {
31 fat_read_only = 1,
32 fat_hidden = 2,
33 fat_system = 4,
34 fat_volume_id = 8,
35 fat_directory = 0x10,
36 fat_archive = 0x20
39 struct dir_entry {
40 u8 name[8];
41 u8 format[3];
42 u8 attr;
43 u8 reserved[10];
44 u16 time;
45 u16 date;
46 u16 cluster;
47 u32 size;
48 } __attribute__((__packed__));
50 static const int mbr_sectors_per_fat = 0x16;
51 static const int mbr_root_entries = 0x11;
52 static const int mbr_fat_count = 0x10;
53 static const int mbr_reserved_sectors = 0xd;
54 static const int mbr_dev_desc = 0x15;
55 static const int mbr_fsid = 0x36;
57 dir_entry *root_dir;
58 dir_entry *current_dir;
60 unsigned char *mbr;
61 unsigned char *main_fat;
63 int find_file(const char *filename);
64 inline short get_cluster_val(int index);
65 inline void set_cluster_val(int n, int val);
66 void filename_to_fatname(const char *filename, char *fatname);
67 void fatname_to_filename(const char *filename, char *fatname);
69 bool mounted;
70 public:
71 fat();
73 void load_file(const string &filename, buffer &addr);
74 file::file_meta load_meta(const string &filename);
76 list<p<file> > list_directory(const string &dirname);
78 void save_file(const string &filename, buffer &addr);
80 bool mount(p<block>);
82 static void register_type();