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 */ 14 typedef struct { 15 time_t tv_sec; 16 } stat_beos_time; 17 18 19 // BeOS structures 20 21 typedef struct beos_iovec { 22 void *iov_base; 23 size_t iov_len; 24 } beos_iovec; 25 26 typedef 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 35 struct 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 51 struct 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 66 typedef struct beos_attr_info { 67 uint32 type; 68 off_t size; 69 } beos_attr_info; 70 71 typedef 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 83 typedef int beos_op_read_vnode(void *ns, ino_t vnid, char r, void **node); 84 typedef int beos_op_write_vnode(void *ns, void *node, char r); 85 typedef int beos_op_remove_vnode(void *ns, void *node, char r); 86 typedef int beos_op_secure_vnode(void *ns, void *node); 87 88 typedef int beos_op_walk(void *ns, void *base, const char *file, char **newpath, 89 ino_t *vnid); 90 91 typedef int beos_op_access(void *ns, void *node, int mode); 92 93 typedef int beos_op_create(void *ns, void *dir, const char *name, 94 int omode, int perms, ino_t *vnid, void **cookie); 95 typedef int beos_op_mkdir(void *ns, void *dir, const char *name, int perms); 96 typedef int beos_op_symlink(void *ns, void *dir, const char *name, 97 const char *path); 98 typedef int beos_op_link(void *ns, void *dir, const char *name, void *node); 99 100 typedef int beos_op_rename(void *ns, void *olddir, const char *oldname, 101 void *newdir, const char *newname); 102 typedef int beos_op_unlink(void *ns, void *dir, const char *name); 103 typedef int beos_op_rmdir(void *ns, void *dir, const char *name); 104 105 typedef int beos_op_readlink(void *ns, void *node, char *buf, size_t *bufsize); 106 107 typedef int beos_op_opendir(void *ns, void *node, void **cookie); 108 typedef int beos_op_closedir(void *ns, void *node, void *cookie); 109 typedef int beos_op_rewinddir(void *ns, void *node, void *cookie); 110 typedef int beos_op_readdir(void *ns, void *node, void *cookie, long *num, 111 struct beos_dirent *buf, size_t bufsize); 112 113 typedef int beos_op_open(void *ns, void *node, int omode, void **cookie); 114 typedef int beos_op_close(void *ns, void *node, void *cookie); 115 typedef int beos_op_free_cookie(void *ns, void *node, void *cookie); 116 typedef int beos_op_read(void *ns, void *node, void *cookie, off_t pos, 117 void *buf, size_t *len); 118 typedef int beos_op_write(void *ns, void *node, void *cookie, off_t pos, 119 const void *buf, size_t *len); 120 typedef int beos_op_readv(void *ns, void *node, void *cookie, off_t pos, 121 const beos_iovec *vec, size_t count, size_t *len); 122 typedef int beos_op_writev(void *ns, void *node, void *cookie, off_t pos, 123 const beos_iovec *vec, size_t count, size_t *len); 124 typedef int beos_op_ioctl(void *ns, void *node, void *cookie, int cmd, 125 void *buf, size_t len); 126 typedef int beos_op_setflags(void *ns, void *node, void *cookie, int flags); 127 128 typedef int beos_op_rstat(void *ns, void *node, struct beos_stat *); 129 typedef int beos_op_wstat(void *ns, void *node, const struct beos_stat *, 130 long mask); 131 typedef int beos_op_fsync(void *ns, void *node); 132 133 typedef int beos_op_select(void *ns, void *node, void *cookie, uint8 event, 134 uint32 ref, selectsync *sync); 135 typedef int beos_op_deselect(void *ns, void *node, void *cookie, uint8 event, 136 selectsync *sync); 137 138 typedef int beos_op_initialize(const char *devname, void *parms, size_t len); 139 typedef int beos_op_mount(dev_t nsid, const char *devname, ulong flags, 140 void *parms, size_t len, void **data, ino_t *vnid); 141 typedef int beos_op_unmount(void *ns); 142 typedef int beos_op_sync(void *ns); 143 typedef int beos_op_rfsstat(void *ns, struct beos_fs_info *); 144 typedef int beos_op_wfsstat(void *ns, struct beos_fs_info *, long mask); 145 146 typedef int beos_op_open_attrdir(void *ns, void *node, void **cookie); 147 typedef int beos_op_close_attrdir(void *ns, void *node, void *cookie); 148 typedef int beos_op_rewind_attrdir(void *ns, void *node, void *cookie); 149 typedef int beos_op_read_attrdir(void *ns, void *node, void *cookie, long *num, 150 struct beos_dirent *buf, size_t bufsize); 151 typedef int beos_op_remove_attr(void *ns, void *node, const char *name); 152 typedef int beos_op_rename_attr(void *ns, void *node, const char *oldname, 153 const char *newname); 154 typedef int beos_op_stat_attr(void *ns, void *node, const char *name, 155 struct beos_attr_info *buf); 156 157 typedef int beos_op_write_attr(void *ns, void *node, const char *name, int type, 158 const void *buf, size_t *len, off_t pos); 159 typedef int beos_op_read_attr(void *ns, void *node, const char *name, int type, 160 void *buf, size_t *len, off_t pos); 161 162 typedef int beos_op_open_indexdir(void *ns, void **cookie); 163 typedef int beos_op_close_indexdir(void *ns, void *cookie); 164 typedef int beos_op_rewind_indexdir(void *ns, void *cookie); 165 typedef int beos_op_read_indexdir(void *ns, void *cookie, long *num, 166 struct beos_dirent *buf, size_t bufsize); 167 typedef int beos_op_create_index(void *ns, const char *name, int type, 168 int flags); 169 typedef int beos_op_remove_index(void *ns, const char *name); 170 typedef int beos_op_rename_index(void *ns, const char *oldname, 171 const char *newname); 172 typedef int beos_op_stat_index(void *ns, const char *name, 173 struct beos_index_info *buf); 174 175 typedef int beos_op_open_query(void *ns, const char *query, ulong flags, 176 port_id port, long token, void **cookie); 177 typedef int beos_op_close_query(void *ns, void *cookie); 178 typedef 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 184 typedef 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