axle OS
x86_32 UNIX-like hobby OS
fs.h
1 #ifndef FS_H
2 #define FS_H
3 
4 #include <std/common.h>
5 
6 #define FS_FILE 0x01
7 #define FS_DIRECTORY 0x02
8 #define FS_CHARDEVICE 0x03
9 #define FS_BLOCKDEVICE 0x04
10 #define FS_PIPE 0x05
11 #define FS_SYMLINK 0x06
12 #define FS_MOUNTPOINT 0x08 //use 8 instead of 7 so we can OR with FS_DIRECTORY
13 
14 #define EOF (-1)
15 
16 enum {
17  SEEK_SET = 0,
18  SEEK_CUR,
19  SEEK_END,
20 };
21 
22 struct fs_node;
23 
24 typedef uint32_t (*read_type_t)(struct fs_node*, uint32_t, uint32_t, uint8_t*);
25 typedef uint32_t (*write_type_t)(struct fs_node*, uint32_t, uint32_t, uint8_t*);
26 typedef void (*open_type_t)(struct fs_node*);
27 typedef void (*close_type_t)(struct fs_node*);
28 typedef struct dirent * (*readdir_type_t)(struct fs_node*, uint32_t);
29 typedef struct fs_node * (*finddir_type_t)(struct fs_node*, char* name);
30 
31 typedef struct fs_node {
32  char name[128]; //filename
33  uint32_t mask; //permission mask
34  uint32_t uid; //owning user
35  uint32_t gid; //owning group
36  uint32_t flags; //includes node type
37  uint32_t inode; //allows fs to identify files
38  uint32_t length; //size of file (bytes)
39  uint32_t impl;
40  read_type_t read;
41  write_type_t write;
42  open_type_t open;
43  close_type_t close;
44  readdir_type_t readdir;
45  finddir_type_t finddir;
46  struct fs_node* ptr; //used by mountpoints and symlinks
47  struct fs_node* parent; //parent directory of this node
48 } fs_node_t;
49 
50 typedef struct file_t {
51  uint32_t fpos;
52  fs_node_t* node;
53 } FILE;
54 
55 struct dirent {
56  char name[128]; //filename
57  uint32_t ino; //inode number
58 };
59 
60 extern fs_node_t* fs_root; //filesystem root
61 
62 //standard read/write/open/close
63 //note: these are suffixed with _fs to distinguish from the functions
64 //that deal with file descriptors, not file nodes
65 uint32_t read_fs(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer);
66 uint32_t write_fs(fs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer);
67 void open_fs(fs_node_t* node, uint8_t read, uint8_t write);
68 void close_fs(fs_node_t* node);
69 struct dirent* readdir_fs(fs_node_t* node, uint32_t index);
70 fs_node_t* finddir_fs(fs_node_t* node, char* name);
71 
72 FILE* fopen(char* filename, char* mode);
73 void fclose(FILE* stream);
74 
75 int ftell(FILE* stream);
76 int fseek(FILE* stream, long offset, int origin);
77 uint8_t fgetc(FILE* stream);
78 
79 uint32_t fread(void* buffer, uint32_t size, uint32_t count, FILE* stream);
80 uint32_t read(int fd, void* buf, uint32_t count);
81 
82 #endif
Definition: fs.h:31
Definition: fs.h:55
Definition: size.h:4
Definition: rd_file_internal.h:7