blob: 98c1e904d1d6e84d2738e541fc511329d648531f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#ifndef __FILESYSTEM_H__
#define __FILESYSTEM_H__
#include "types.h"
#define FS_OFFSET 0x1000
#define FS_BLOCKS_SIZE 512
#define FS_BLOCKS_N 12
#define INODE_TYPE_FILE 0
#define INODE_TYPE_DIR 1
#define INODE_TYPE_LINK 2
typedef struct time_s
{
uint16_t time;
uint16_t date;
} time_t;
/* on-disk structures */
struct fs_superblock
{
uint magic :5; /* identifier */
uint serial_port :3; /* serial port id from serial.h */
uint16_t blk_size; /* default is 512 bytes */
uint16_t imap_size; /* size of the inode table in blocks */
uint16_t dmap_size; /* size of the data blocks map in blocks */
};
struct fs_blk_entry
{
uint16_t b_number; /* block number */
uint16_t data_size; /* bytes used */
};
typedef struct fs_inode
{
uint16_t i_number; /* identifier */
uint i_mode :3; /* inode mode (rwx) */
uint i_uid :3; /* user (owner) id */
uint i_type :2; /* inode type */
uint8_t i_blocks; /* number of blocks */
struct fs_blk_entry i_block[FS_BLOCKS_N]; /* direct blocks */
uint16_t parent;
} inode_t;
/* inode table structures */
/* i_number is derived from location */
struct fs_inode_entry
{
uint8_t str_len;
char name[24];
};
/* filesystem struct for the operating system */
struct filesystem
{
size_t size;
size_t fsize;
inode_t *mntpt;
};
struct filesystem * fs_parse_superblock(struct filesystem *fs);
/* resolves an arbitrary path */
uint16_t fs_parse_path(const char *path);
/* gets inode from inumber */
inode_t * fs_get_inode(inode_t *buffer, uint16_t i_number);
inode_t * fs_new_inode(inode_t *inode, const char *name);
int fs_free_inode(const inode_t *inode);
void fs_chmod(inode_t *inode, uint8_t mode);
void fs_chown(inode_t *inode, uint8_t uid);
int fs_rename(inode_t *inode, const char *name);
#endif // __FILESYSTEM_H__
|