Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / minix / vtreefs.h @ 13

History | View | Annotate | Download (2.8 KB)

1 13 up20180614
#ifndef _MINIX_VTREEFS_H
2
#define _MINIX_VTREEFS_H
3
4
struct inode;
5
typedef int index_t;
6
typedef void *cbdata_t;
7
8
#define NO_INDEX        ((index_t) -1)
9
10
/* Maximum file name length, excluding terminating null character, for which
11
 * the name will be allocated statically. Longer names will be allocated
12
 * dynamically, and should not be used for system-critical file systems.
13
 */
14
#define PNAME_MAX        24
15
16
struct inode_stat {
17
        mode_t mode;                /* file mode (type and permissions) */
18
        uid_t uid;                /* user ID */
19
        gid_t gid;                /* group ID */
20
        off_t size;                /* file size */
21
        dev_t dev;                /* device number (for char/block type files) */
22
};
23
24
struct fs_hooks {
25
        void (*init_hook)(void);
26
        void (*cleanup_hook)(void);
27
        int (*lookup_hook)(struct inode *inode, char *name, cbdata_t cbdata);
28
        int (*getdents_hook)(struct inode *inode, cbdata_t cbdata);
29
        ssize_t (*read_hook)(struct inode *inode, char *ptr, size_t len,
30
            off_t off, cbdata_t cbdata);
31
        ssize_t (*write_hook)(struct inode *inode, char *ptr, size_t max,
32
            off_t off, cbdata_t cbdata);
33
        int (*trunc_hook)(struct inode *inode, off_t offset, cbdata_t cbdata);
34
        int (*mknod_hook)(struct inode *inode, char *name,
35
            struct inode_stat *stat, cbdata_t cbdata);
36
        int (*unlink_hook)(struct inode *inode, cbdata_t cbdata);
37
        int (*slink_hook)(struct inode *inode, char *name,
38
            struct inode_stat *stat, char *path, cbdata_t cbdata);
39
        int (*rdlink_hook)(struct inode *inode, char *ptr, size_t max,
40
            cbdata_t cbdata);
41
        int (*chstat_hook)(struct inode *inode, struct inode_stat *stat,
42
            cbdata_t cbdata);
43
        void (*message_hook)(message *m, int ipc_status);
44
};
45
46
extern struct inode *add_inode(struct inode *parent, const char *name,
47
        index_t index, const struct inode_stat *stat,
48
        index_t nr_indexed_slots, cbdata_t cbdata);
49
extern void delete_inode(struct inode *inode);
50
51
extern struct inode *get_inode_by_name(const struct inode *parent,
52
        const char *name);
53
extern struct inode *get_inode_by_index(const struct inode *parent,
54
        index_t index);
55
56
extern const char *get_inode_name(const struct inode *inode);
57
extern index_t get_inode_index(const struct inode *inode);
58
extern index_t get_inode_slots(const struct inode *inode);
59
extern cbdata_t get_inode_cbdata(const struct inode *inode);
60
extern void *get_inode_extra(const struct inode *inode);
61
62
extern struct inode *get_root_inode(void);
63
extern struct inode *get_parent_inode(const struct inode *inode);
64
extern struct inode *get_first_inode(const struct inode *parent);
65
extern struct inode *get_next_inode(const struct inode *previous);
66
67
extern void get_inode_stat(const struct inode *inode, struct inode_stat *stat);
68
extern void set_inode_stat(struct inode *inode, struct inode_stat *stat);
69
70
extern void run_vtreefs(struct fs_hooks *hooks, unsigned int nr_inodes,
71
        size_t inode_extra, struct inode_stat *stat, index_t nr_indexed_slots,
72
        size_t buf_size);
73
74
#endif /* _MINIX_VTREEFS_H */