btrfs: [] on the end of a struct field is a variable length array.
[haiku.git] / headers / private / userlandfs / legacy / fsproto.h
blobd15881d59f907798da18e1827f85b80fa99047e4
1 #ifndef _FSPROTO_H
2 #define _FSPROTO_H
4 #include <dirent.h>
5 #include <sys/types.h>
6 #include <sys/param.h>
7 #include <sys/stat.h>
8 #include <unistd.h>
9 #include <iovec.h>
11 #include <OS.h>
13 #ifndef BUILDING_USERLAND_FS_SERVER
14 # include <fs_attr.h>
15 # include <fs_info.h>
16 # include <fs_volume.h>
17 #endif // ! BUILDING_USERLAND_FS_SERVER
19 #ifndef _IMPEXP_KERNEL
20 #define _IMPEXP_KERNEL
21 #endif
23 typedef dev_t nspace_id;
24 typedef ino_t vnode_id;
27 * PUBLIC PART OF THE FILE SYSTEM PROTOCOL
30 #define WSTAT_MODE 0x0001
31 #define WSTAT_UID 0x0002
32 #define WSTAT_GID 0x0004
33 #define WSTAT_SIZE 0x0008
34 #define WSTAT_ATIME 0x0010
35 #define WSTAT_MTIME 0x0020
36 #define WSTAT_CRTIME 0x0040
38 #define WFSSTAT_NAME 0x0001
40 #define B_ENTRY_CREATED 1
41 #define B_ENTRY_REMOVED 2
42 #define B_ENTRY_MOVED 3
43 #define B_STAT_CHANGED 4
44 #define B_ATTR_CHANGED 5
45 #define B_DEVICE_MOUNTED 6
46 #define B_DEVICE_UNMOUNTED 7
48 #define B_STOP_WATCHING 0x0000
49 #define B_WATCH_NAME 0x0001
50 #define B_WATCH_STAT 0x0002
51 #define B_WATCH_ATTR 0x0004
52 #define B_WATCH_DIRECTORY 0x0008
54 #define SELECT_READ 1
55 #define SELECT_WRITE 2
56 #define SELECT_EXCEPTION 3
58 // missing ioctl() call added
59 #define IOCTL_FILE_UNCACHED_IO 10000
60 #define IOCTL_CREATE_TIME 10002
61 #define IOCTL_MODIFIED_TIME 10003
63 #define B_CUR_FS_API_VERSION 2
65 struct attr_info;
66 struct index_info;
67 typedef struct selectsync selectsync;
69 typedef int op_read_vnode(void *ns, vnode_id vnid, char r, void **node);
70 typedef int op_write_vnode(void *ns, void *node, char r);
71 typedef int op_remove_vnode(void *ns, void *node, char r);
72 typedef int op_secure_vnode(void *ns, void *node);
74 typedef int op_walk(void *ns, void *base, const char *file, char **newpath,
75 vnode_id *vnid);
77 typedef int op_access(void *ns, void *node, int mode);
79 typedef int op_create(void *ns, void *dir, const char *name,
80 int omode, int perms, vnode_id *vnid, void **cookie);
81 typedef int op_mkdir(void *ns, void *dir, const char *name, int perms);
82 typedef int op_symlink(void *ns, void *dir, const char *name,
83 const char *path);
84 typedef int op_link(void *ns, void *dir, const char *name, void *node);
86 typedef int op_rename(void *ns, void *olddir, const char *oldname,
87 void *newdir, const char *newname);
88 typedef int op_unlink(void *ns, void *dir, const char *name);
89 typedef int op_rmdir(void *ns, void *dir, const char *name);
91 typedef int op_readlink(void *ns, void *node, char *buf, size_t *bufsize);
93 typedef int op_opendir(void *ns, void *node, void **cookie);
94 typedef int op_closedir(void *ns, void *node, void *cookie);
95 typedef int op_rewinddir(void *ns, void *node, void *cookie);
96 typedef int op_readdir(void *ns, void *node, void *cookie, long *num,
97 struct dirent *buf, size_t bufsize);
99 typedef int op_open(void *ns, void *node, int omode, void **cookie);
100 typedef int op_close(void *ns, void *node, void *cookie);
101 typedef int op_free_cookie(void *ns, void *node, void *cookie);
102 typedef int op_read(void *ns, void *node, void *cookie, off_t pos, void *buf,
103 size_t *len);
104 typedef int op_write(void *ns, void *node, void *cookie, off_t pos,
105 const void *buf, size_t *len);
106 typedef int op_readv(void *ns, void *node, void *cookie, off_t pos, const iovec *vec,
107 size_t count, size_t *len);
108 typedef int op_writev(void *ns, void *node, void *cookie, off_t pos, const iovec *vec,
109 size_t count, size_t *len);
110 typedef int op_ioctl(void *ns, void *node, void *cookie, int cmd, void *buf,
111 size_t len);
112 typedef int op_setflags(void *ns, void *node, void *cookie, int flags);
114 typedef int op_rstat(void *ns, void *node, struct stat *);
115 typedef int op_wstat(void *ns, void *node, struct stat *, long mask);
116 typedef int op_fsync(void *ns, void *node);
118 typedef int op_select(void *ns, void *node, void *cookie, uint8 event,
119 uint32 ref, selectsync *sync);
120 typedef int op_deselect(void *ns, void *node, void *cookie, uint8 event,
121 selectsync *sync);
123 typedef int op_initialize(const char *devname, void *parms, size_t len);
124 typedef int op_mount(nspace_id nsid, const char *devname, ulong flags,
125 void *parms, size_t len, void **data, vnode_id *vnid);
126 typedef int op_unmount(void *ns);
127 typedef int op_sync(void *ns);
128 typedef int op_rfsstat(void *ns, struct fs_info *);
129 typedef int op_wfsstat(void *ns, struct fs_info *, long mask);
132 typedef int op_open_attrdir(void *ns, void *node, void **cookie);
133 typedef int op_close_attrdir(void *ns, void *node, void *cookie);
134 typedef int op_rewind_attrdir(void *ns, void *node, void *cookie);
135 typedef int op_read_attrdir(void *ns, void *node, void *cookie, long *num,
136 struct dirent *buf, size_t bufsize);
137 typedef int op_remove_attr(void *ns, void *node, const char *name);
138 typedef int op_rename_attr(void *ns, void *node, const char *oldname,
139 const char *newname);
140 typedef int op_stat_attr(void *ns, void *node, const char *name,
141 struct attr_info *buf);
143 typedef int op_write_attr(void *ns, void *node, const char *name, int type,
144 const void *buf, size_t *len, off_t pos);
145 typedef int op_read_attr(void *ns, void *node, const char *name, int type,
146 void *buf, size_t *len, off_t pos);
148 typedef int op_open_indexdir(void *ns, void **cookie);
149 typedef int op_close_indexdir(void *ns, void *cookie);
150 typedef int op_rewind_indexdir(void *ns, void *cookie);
151 typedef int op_read_indexdir(void *ns, void *cookie, long *num,
152 struct dirent *buf, size_t bufsize);
153 typedef int op_create_index(void *ns, const char *name, int type, int flags);
154 typedef int op_remove_index(void *ns, const char *name);
155 typedef int op_rename_index(void *ns, const char *oldname,
156 const char *newname);
157 typedef int op_stat_index(void *ns, const char *name, struct index_info *buf);
159 typedef int op_open_query(void *ns, const char *query, ulong flags,
160 port_id port, long token, void **cookie);
161 typedef int op_close_query(void *ns, void *cookie);
162 typedef int op_read_query(void *ns, void *cookie, long *num,
163 struct dirent *buf, size_t bufsize);
165 typedef struct vnode_ops {
166 op_read_vnode (*read_vnode);
167 op_write_vnode (*write_vnode);
168 op_remove_vnode (*remove_vnode);
169 op_secure_vnode (*secure_vnode);
170 op_walk (*walk);
171 op_access (*access);
172 op_create (*create);
173 op_mkdir (*mkdir);
174 op_symlink (*symlink);
175 op_link (*link);
176 op_rename (*rename);
177 op_unlink (*unlink);
178 op_rmdir (*rmdir);
179 op_readlink (*readlink);
180 op_opendir (*opendir);
181 op_closedir (*closedir);
182 op_free_cookie (*free_dircookie);
183 op_rewinddir (*rewinddir);
184 op_readdir (*readdir);
185 op_open (*open);
186 op_close (*close);
187 op_free_cookie (*free_cookie);
188 op_read (*read);
189 op_write (*write);
190 op_readv (*readv);
191 op_writev (*writev);
192 op_ioctl (*ioctl);
193 op_setflags (*setflags);
194 op_rstat (*rstat);
195 op_wstat (*wstat);
196 op_fsync (*fsync);
197 op_initialize (*initialize);
198 op_mount (*mount);
199 op_unmount (*unmount);
200 op_sync (*sync);
201 op_rfsstat (*rfsstat);
202 op_wfsstat (*wfsstat);
203 op_select (*select);
204 op_deselect (*deselect);
205 op_open_indexdir (*open_indexdir);
206 op_close_indexdir (*close_indexdir);
207 op_free_cookie (*free_indexdircookie);
208 op_rewind_indexdir (*rewind_indexdir);
209 op_read_indexdir (*read_indexdir);
210 op_create_index (*create_index);
211 op_remove_index (*remove_index);
212 op_rename_index (*rename_index);
213 op_stat_index (*stat_index);
214 op_open_attrdir (*open_attrdir);
215 op_close_attrdir (*close_attrdir);
216 op_free_cookie (*free_attrdircookie);
217 op_rewind_attrdir (*rewind_attrdir);
218 op_read_attrdir (*read_attrdir);
219 op_write_attr (*write_attr);
220 op_read_attr (*read_attr);
221 op_remove_attr (*remove_attr);
222 op_rename_attr (*rename_attr);
223 op_stat_attr (*stat_attr);
224 op_open_query (*open_query);
225 op_close_query (*close_query);
226 op_free_cookie (*free_querycookie);
227 op_read_query (*read_query);
228 } vnode_ops;
230 #ifdef __cplusplus
231 extern "C" {
232 #endif
234 extern _IMPEXP_KERNEL int new_path(const char *path, char **copy);
235 extern _IMPEXP_KERNEL void free_path(char *p);
237 extern _IMPEXP_KERNEL int notify_listener(int op, nspace_id nsid,
238 vnode_id vnida, vnode_id vnidb,
239 vnode_id vnidc, const char *name);
240 extern _IMPEXP_KERNEL void notify_select_event(selectsync *sync, uint32 ref);
241 extern _IMPEXP_KERNEL int send_notification(port_id port, long token,
242 ulong what, long op, nspace_id nsida,
243 nspace_id nsidb, vnode_id vnida,
244 vnode_id vnidb, vnode_id vnidc,
245 const char *name);
246 extern _IMPEXP_KERNEL int get_vnode(nspace_id nsid, vnode_id vnid, void **data);
247 extern _IMPEXP_KERNEL int put_vnode(nspace_id nsid, vnode_id vnid);
248 extern _IMPEXP_KERNEL int new_vnode(nspace_id nsid, vnode_id vnid, void *data);
249 extern _IMPEXP_KERNEL int remove_vnode(nspace_id nsid, vnode_id vnid);
250 extern _IMPEXP_KERNEL int unremove_vnode(nspace_id nsid, vnode_id vnid);
251 extern _IMPEXP_KERNEL int is_vnode_removed(nspace_id nsid, vnode_id vnid);
254 extern _EXPORT vnode_ops fs_entry;
255 extern _EXPORT int32 api_version;
257 #ifdef __cplusplus
258 } // extern "C"
259 #endif
261 #endif