Created
November 5, 2009 01:05
-
-
Save ldunn/226595 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #ifndef VFS_H | |
| #define VFS_H | |
| #include <stdint.h> | |
| #define FS_FILE 0x01 | |
| #define FS_DIRECTORY 0x02 | |
| #define FS_CHARDEVICE 0x03 | |
| #define FS_BLOCKDEVICE 0x04 | |
| #define FS_PIPE 0x05 | |
| #define FS_SYMLINK 0x06 | |
| #define FS_MOUNTPOINT 0x08 // Is the file an active mountpoint? | |
| struct fs_node; | |
| typedef uint32_t (*read_type_t)(struct fs_node*,uint32_t,uint32_t,uint8_t*); | |
| typedef uint32_t (*write_type_t)(struct fs_node*,uint32_t,uint32_t,uint8_t*); | |
| typedef void (*open_type_t)(struct fs_node*,uint32_t,uint32_t); | |
| typedef void (*close_type_t)(struct fs_node*); | |
| typedef struct dirent * (*readdir_type_t)(struct fs_node*,uint32_t); | |
| typedef struct fs_node * (*finddir_type_t)(struct fs_node*,char *name); | |
| struct dirent // One of these is returned by the readdir call, according to POSIX. | |
| { | |
| char name[128]; // Filename. | |
| uint32_t ino; // Inode number. Required by POSIX. | |
| }; | |
| typedef struct fs_node | |
| { | |
| char name[128]; // The filename. | |
| uint32_t type; // Includes the node type. See #defines above. | |
| uint32_t inode; // This is device-specific - provides a way for a filesystem to identify files. | |
| uint32_t length; // Size of the file, in bytes. | |
| uint32_t flags; | |
| read_type_t read; | |
| write_type_t write; | |
| open_type_t open; | |
| close_type_t close; | |
| readdir_type_t readdir; | |
| finddir_type_t finddir; | |
| struct fs_node *ptr; // Used by mountpoints and symlinks. | |
| } fs_node_t; | |
| extern fs_node_t *fs_root; // The root of the filesystem. | |
| // Standard read/write/open/close functions. Note that these are all suffixed with | |
| // _fs to distinguish them from the read/write/open/close which deal with file descriptors | |
| // not file nodes. | |
| extern uint32_t read_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer); | |
| extern uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer); | |
| extern void open_fs(fs_node_t *node, uint8_t read, uint8_t write); | |
| extern void close_fs(fs_node_t *node); | |
| struct dirent *readdir_fs(fs_node_t *node, uint32_t index); | |
| fs_node_t *finddir_fs(fs_node_t *node, char *name); | |
| #endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment