1// beos_fs_interface.h
2
3#ifndef USERLAND_FS_BEOS_FS_INTERFACE_H
4#define USERLAND_FS_BEOS_FS_INTERFACE_H
5
6#include <fs_interface.h>
7
8
9// BeOS FS API version
10#define		BEOS_FS_API_VERSION	2
11
12
13/* helper struct allowing us to avoid problems with the st_*time macros */
14typedef struct {
15    time_t  tv_sec;
16} stat_beos_time;
17
18
19// BeOS structures
20
21typedef struct beos_iovec {
22	void	*iov_base;
23	size_t	iov_len;
24} beos_iovec;
25
26typedef struct beos_dirent {
27	dev_t			d_dev;
28	dev_t			d_pdev;
29	ino_t			d_ino;
30	ino_t			d_pino;
31	unsigned short	d_reclen;
32	char			d_name[1];
33} beos_dirent_t;
34
35struct beos_stat {
36    dev_t			st_dev;
37    ino_t			st_ino;
38    mode_t			st_mode;
39    nlink_t			st_nlink;
40    uid_t			st_uid;
41    gid_t			st_gid;
42    off_t			st_size;
43    dev_t			st_rdev;
44    size_t			st_blksize;
45    stat_beos_time	st_atim;
46    stat_beos_time	st_mtim;
47    stat_beos_time	st_ctim;
48    stat_beos_time	st_crtim;
49};
50
51struct beos_fs_info {
52	dev_t	dev;
53	ino_t	root;
54	uint32	flags;
55	off_t	block_size;
56	off_t	io_size;
57	off_t	total_blocks;
58	off_t	free_blocks;
59	off_t	total_nodes;
60	off_t	free_nodes;
61	char	device_name[128];
62	char	volume_name[B_FILE_NAME_LENGTH];
63	char	fsh_name[B_OS_NAME_LENGTH];
64};
65
66typedef struct beos_attr_info {
67	uint32     type;
68	off_t      size;
69} beos_attr_info;
70
71typedef struct beos_index_info {
72	uint32     type;
73	off_t      size;
74	time_t     modification_time;
75	time_t     creation_time;
76	uid_t      uid;
77	gid_t      gid;
78} beos_index_info;
79
80
81// FS interface hook types
82
83typedef int	beos_op_read_vnode(void *ns, ino_t vnid, char r, void **node);
84typedef int	beos_op_write_vnode(void *ns, void *node, char r);
85typedef int	beos_op_remove_vnode(void *ns, void *node, char r);
86typedef int	beos_op_secure_vnode(void *ns, void *node);
87
88typedef int	beos_op_walk(void *ns, void *base, const char *file, char **newpath,
89					ino_t *vnid);
90
91typedef int	beos_op_access(void *ns, void *node, int mode);
92
93typedef int	beos_op_create(void *ns, void *dir, const char *name,
94					int omode, int perms, ino_t *vnid, void **cookie);
95typedef int	beos_op_mkdir(void *ns, void *dir, const char *name, int perms);
96typedef int	beos_op_symlink(void *ns, void *dir, const char *name,
97					const char *path);
98typedef int beos_op_link(void *ns, void *dir, const char *name, void *node);
99
100typedef int	beos_op_rename(void *ns, void *olddir, const char *oldname,
101					void *newdir, const char *newname);
102typedef int	beos_op_unlink(void *ns, void *dir, const char *name);
103typedef int	beos_op_rmdir(void *ns, void *dir, const char *name);
104
105typedef int	beos_op_readlink(void *ns, void *node, char *buf, size_t *bufsize);
106
107typedef int beos_op_opendir(void *ns, void *node, void **cookie);
108typedef int	beos_op_closedir(void *ns, void *node, void *cookie);
109typedef int	beos_op_rewinddir(void *ns, void *node, void *cookie);
110typedef int	beos_op_readdir(void *ns, void *node, void *cookie, long *num,
111					struct beos_dirent *buf, size_t bufsize);
112
113typedef int	beos_op_open(void *ns, void *node, int omode, void **cookie);
114typedef int	beos_op_close(void *ns, void *node, void *cookie);
115typedef int beos_op_free_cookie(void *ns, void *node, void *cookie);
116typedef int beos_op_read(void *ns, void *node, void *cookie, off_t pos,
117					void *buf, size_t *len);
118typedef int beos_op_write(void *ns, void *node, void *cookie, off_t pos,
119					const void *buf, size_t *len);
120typedef int beos_op_readv(void *ns, void *node, void *cookie, off_t pos,
121					const beos_iovec *vec, size_t count, size_t *len);
122typedef int beos_op_writev(void *ns, void *node, void *cookie, off_t pos,
123					const beos_iovec *vec, size_t count, size_t *len);
124typedef int	beos_op_ioctl(void *ns, void *node, void *cookie, int cmd,
125					void *buf, size_t len);
126typedef	int	beos_op_setflags(void *ns, void *node, void *cookie, int flags);
127
128typedef int	beos_op_rstat(void *ns, void *node, struct beos_stat *);
129typedef int beos_op_wstat(void *ns, void *node, const struct beos_stat *,
130					long mask);
131typedef int	beos_op_fsync(void *ns, void *node);
132
133typedef int	beos_op_select(void *ns, void *node, void *cookie, uint8 event,
134					uint32 ref, selectsync *sync);
135typedef int	beos_op_deselect(void *ns, void *node, void *cookie, uint8 event,
136					selectsync *sync);
137
138typedef int	beos_op_initialize(const char *devname, void *parms, size_t len);
139typedef int	beos_op_mount(dev_t nsid, const char *devname, ulong flags,
140					void *parms, size_t len, void **data, ino_t *vnid);
141typedef int	beos_op_unmount(void *ns);
142typedef int	beos_op_sync(void *ns);
143typedef int beos_op_rfsstat(void *ns, struct beos_fs_info *);
144typedef int beos_op_wfsstat(void *ns, struct beos_fs_info *, long mask);
145
146typedef int	beos_op_open_attrdir(void *ns, void *node, void **cookie);
147typedef int	beos_op_close_attrdir(void *ns, void *node, void *cookie);
148typedef int	beos_op_rewind_attrdir(void *ns, void *node, void *cookie);
149typedef int	beos_op_read_attrdir(void *ns, void *node, void *cookie, long *num,
150					struct beos_dirent *buf, size_t bufsize);
151typedef int	beos_op_remove_attr(void *ns, void *node, const char *name);
152typedef	int	beos_op_rename_attr(void *ns, void *node, const char *oldname,
153					const char *newname);
154typedef int	beos_op_stat_attr(void *ns, void *node, const char *name,
155					struct beos_attr_info *buf);
156
157typedef int	beos_op_write_attr(void *ns, void *node, const char *name, int type,
158					const void *buf, size_t *len, off_t pos);
159typedef int	beos_op_read_attr(void *ns, void *node, const char *name, int type,
160					void *buf, size_t *len, off_t pos);
161
162typedef int	beos_op_open_indexdir(void *ns, void **cookie);
163typedef int	beos_op_close_indexdir(void *ns, void *cookie);
164typedef int	beos_op_rewind_indexdir(void *ns, void *cookie);
165typedef int	beos_op_read_indexdir(void *ns, void *cookie, long *num,
166					struct beos_dirent *buf, size_t bufsize);
167typedef int	beos_op_create_index(void *ns, const char *name, int type,
168					int flags);
169typedef int	beos_op_remove_index(void *ns, const char *name);
170typedef	int	beos_op_rename_index(void *ns, const char *oldname,
171					const char *newname);
172typedef int	beos_op_stat_index(void *ns, const char *name,
173					struct beos_index_info *buf);
174
175typedef int	beos_op_open_query(void *ns, const char *query, ulong flags,
176					port_id port, long token, void **cookie);
177typedef int	beos_op_close_query(void *ns, void *cookie);
178typedef int	beos_op_read_query(void *ns, void *cookie, long *num,
179					struct beos_dirent *buf, size_t bufsize);
180
181
182// the FS interface structure
183
184typedef struct beos_vnode_ops {
185	beos_op_read_vnode			(*read_vnode);
186	beos_op_write_vnode			(*write_vnode);
187	beos_op_remove_vnode		(*remove_vnode);
188	beos_op_secure_vnode		(*secure_vnode);
189	beos_op_walk				(*walk);
190	beos_op_access				(*access);
191	beos_op_create				(*create);
192	beos_op_mkdir				(*mkdir);
193	beos_op_symlink				(*symlink);
194	beos_op_link				(*link);
195	beos_op_rename				(*rename);
196	beos_op_unlink				(*unlink);
197	beos_op_rmdir				(*rmdir);
198	beos_op_readlink			(*readlink);
199	beos_op_opendir				(*opendir);
200	beos_op_closedir			(*closedir);
201	beos_op_free_cookie			(*free_dircookie);
202	beos_op_rewinddir			(*rewinddir);
203	beos_op_readdir				(*readdir);
204	beos_op_open				(*open);
205	beos_op_close				(*close);
206	beos_op_free_cookie			(*free_cookie);
207	beos_op_read				(*read);
208	beos_op_write				(*write);
209	beos_op_readv				(*readv);
210	beos_op_writev				(*writev);
211	beos_op_ioctl				(*ioctl);
212	beos_op_setflags			(*setflags);
213	beos_op_rstat				(*rstat);
214	beos_op_wstat				(*wstat);
215	beos_op_fsync				(*fsync);
216	beos_op_initialize			(*initialize);
217	beos_op_mount				(*mount);
218	beos_op_unmount				(*unmount);
219	beos_op_sync				(*sync);
220	beos_op_rfsstat				(*rfsstat);
221	beos_op_wfsstat				(*wfsstat);
222	beos_op_select				(*select);
223	beos_op_deselect			(*deselect);
224	beos_op_open_indexdir		(*open_indexdir);
225	beos_op_close_indexdir		(*close_indexdir);
226	beos_op_free_cookie			(*free_indexdircookie);
227	beos_op_rewind_indexdir		(*rewind_indexdir);
228	beos_op_read_indexdir		(*read_indexdir);
229	beos_op_create_index		(*create_index);
230	beos_op_remove_index		(*remove_index);
231	beos_op_rename_index		(*rename_index);
232	beos_op_stat_index			(*stat_index);
233	beos_op_open_attrdir		(*open_attrdir);
234	beos_op_close_attrdir		(*close_attrdir);
235	beos_op_free_cookie			(*free_attrdircookie);
236	beos_op_rewind_attrdir		(*rewind_attrdir);
237	beos_op_read_attrdir		(*read_attrdir);
238	beos_op_write_attr			(*write_attr);
239	beos_op_read_attr			(*read_attr);
240	beos_op_remove_attr			(*remove_attr);
241	beos_op_rename_attr			(*rename_attr);
242	beos_op_stat_attr			(*stat_attr);
243	beos_op_open_query			(*open_query);
244	beos_op_close_query			(*close_query);
245	beos_op_free_cookie			(*free_querycookie);
246	beos_op_read_query			(*read_query);
247} beos_vnode_ops;
248
249#endif	// USERLAND_FS_BEOS_FS_INTERFACE_H
250