#ifndef USERLAND_FS_BEOS_FS_INTERFACE_H
#define USERLAND_FS_BEOS_FS_INTERFACE_H
#include <fs_interface.h>
#define BEOS_FS_API_VERSION 2
typedef struct {
time_t tv_sec;
} stat_beos_time;
typedef struct beos_iovec {
void *iov_base;
size_t iov_len;
} beos_iovec;
typedef struct beos_dirent {
dev_t d_dev;
dev_t d_pdev;
ino_t d_ino;
ino_t d_pino;
unsigned short d_reclen;
char d_name[1];
} beos_dirent_t;
struct beos_stat {
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
off_t st_size;
dev_t st_rdev;
size_t st_blksize;
stat_beos_time st_atim;
stat_beos_time st_mtim;
stat_beos_time st_ctim;
stat_beos_time st_crtim;
};
struct beos_fs_info {
dev_t dev;
ino_t root;
uint32 flags;
off_t block_size;
off_t io_size;
off_t total_blocks;
off_t free_blocks;
off_t total_nodes;
off_t free_nodes;
char device_name[128];
char volume_name[B_FILE_NAME_LENGTH];
char fsh_name[B_OS_NAME_LENGTH];
};
typedef struct beos_attr_info {
uint32 type;
off_t size;
} beos_attr_info;
typedef struct beos_index_info {
uint32 type;
off_t size;
time_t modification_time;
time_t creation_time;
uid_t uid;
gid_t gid;
} beos_index_info;
typedef int beos_op_read_vnode(void *ns, ino_t vnid, char r, void **node);
typedef int beos_op_write_vnode(void *ns, void *node, char r);
typedef int beos_op_remove_vnode(void *ns, void *node, char r);
typedef int beos_op_secure_vnode(void *ns, void *node);
typedef int beos_op_walk(void *ns, void *base, const char *file, char **newpath,
ino_t *vnid);
typedef int beos_op_access(void *ns, void *node, int mode);
typedef int beos_op_create(void *ns, void *dir, const char *name,
int omode, int perms, ino_t *vnid, void **cookie);
typedef int beos_op_mkdir(void *ns, void *dir, const char *name, int perms);
typedef int beos_op_symlink(void *ns, void *dir, const char *name,
const char *path);
typedef int beos_op_link(void *ns, void *dir, const char *name, void *node);
typedef int beos_op_rename(void *ns, void *olddir, const char *oldname,
void *newdir, const char *newname);
typedef int beos_op_unlink(void *ns, void *dir, const char *name);
typedef int beos_op_rmdir(void *ns, void *dir, const char *name);
typedef int beos_op_readlink(void *ns, void *node, char *buf, size_t *bufsize);
typedef int beos_op_opendir(void *ns, void *node, void **cookie);
typedef int beos_op_closedir(void *ns, void *node, void *cookie);
typedef int beos_op_rewinddir(void *ns, void *node, void *cookie);
typedef int beos_op_readdir(void *ns, void *node, void *cookie, long *num,
struct beos_dirent *buf, size_t bufsize);
typedef int beos_op_open(void *ns, void *node, int omode, void **cookie);
typedef int beos_op_close(void *ns, void *node, void *cookie);
typedef int beos_op_free_cookie(void *ns, void *node, void *cookie);
typedef int beos_op_read(void *ns, void *node, void *cookie, off_t pos,
void *buf, size_t *len);
typedef int beos_op_write(void *ns, void *node, void *cookie, off_t pos,
const void *buf, size_t *len);
typedef int beos_op_readv(void *ns, void *node, void *cookie, off_t pos,
const beos_iovec *vec, size_t count, size_t *len);
typedef int beos_op_writev(void *ns, void *node, void *cookie, off_t pos,
const beos_iovec *vec, size_t count, size_t *len);
typedef int beos_op_ioctl(void *ns, void *node, void *cookie, int cmd,
void *buf, size_t len);
typedef int beos_op_setflags(void *ns, void *node, void *cookie, int flags);
typedef int beos_op_rstat(void *ns, void *node, struct beos_stat *);
typedef int beos_op_wstat(void *ns, void *node, const struct beos_stat *,
long mask);
typedef int beos_op_fsync(void *ns, void *node);
typedef int beos_op_select(void *ns, void *node, void *cookie, uint8 event,
uint32 ref, selectsync *sync);
typedef int beos_op_deselect(void *ns, void *node, void *cookie, uint8 event,
selectsync *sync);
typedef int beos_op_initialize(const char *devname, void *parms, size_t len);
typedef int beos_op_mount(dev_t nsid, const char *devname, ulong flags,
void *parms, size_t len, void **data, ino_t *vnid);
typedef int beos_op_unmount(void *ns);
typedef int beos_op_sync(void *ns);
typedef int beos_op_rfsstat(void *ns, struct beos_fs_info *);
typedef int beos_op_wfsstat(void *ns, struct beos_fs_info *, long mask);
typedef int beos_op_open_attrdir(void *ns, void *node, void **cookie);
typedef int beos_op_close_attrdir(void *ns, void *node, void *cookie);
typedef int beos_op_rewind_attrdir(void *ns, void *node, void *cookie);
typedef int beos_op_read_attrdir(void *ns, void *node, void *cookie, long *num,
struct beos_dirent *buf, size_t bufsize);
typedef int beos_op_remove_attr(void *ns, void *node, const char *name);
typedef int beos_op_rename_attr(void *ns, void *node, const char *oldname,
const char *newname);
typedef int beos_op_stat_attr(void *ns, void *node, const char *name,
struct beos_attr_info *buf);
typedef int beos_op_write_attr(void *ns, void *node, const char *name, int type,
const void *buf, size_t *len, off_t pos);
typedef int beos_op_read_attr(void *ns, void *node, const char *name, int type,
void *buf, size_t *len, off_t pos);
typedef int beos_op_open_indexdir(void *ns, void **cookie);
typedef int beos_op_close_indexdir(void *ns, void *cookie);
typedef int beos_op_rewind_indexdir(void *ns, void *cookie);
typedef int beos_op_read_indexdir(void *ns, void *cookie, long *num,
struct beos_dirent *buf, size_t bufsize);
typedef int beos_op_create_index(void *ns, const char *name, int type,
int flags);
typedef int beos_op_remove_index(void *ns, const char *name);
typedef int beos_op_rename_index(void *ns, const char *oldname,
const char *newname);
typedef int beos_op_stat_index(void *ns, const char *name,
struct beos_index_info *buf);
typedef int beos_op_open_query(void *ns, const char *query, ulong flags,
port_id port, long token, void **cookie);
typedef int beos_op_close_query(void *ns, void *cookie);
typedef int beos_op_read_query(void *ns, void *cookie, long *num,
struct beos_dirent *buf, size_t bufsize);
typedef struct beos_vnode_ops {
beos_op_read_vnode *read_vnode;
beos_op_write_vnode *write_vnode;
beos_op_remove_vnode *remove_vnode;
beos_op_secure_vnode *secure_vnode;
beos_op_walk *walk;
beos_op_access *access;
beos_op_create *create;
beos_op_mkdir *mkdir;
beos_op_symlink *symlink;
beos_op_link *link;
beos_op_rename *rename;
beos_op_unlink *unlink;
beos_op_rmdir *rmdir;
beos_op_readlink *readlink;
beos_op_opendir *opendir;
beos_op_closedir *closedir;
beos_op_free_cookie *free_dircookie;
beos_op_rewinddir *rewinddir;
beos_op_readdir *readdir;
beos_op_open *open;
beos_op_close *close;
beos_op_free_cookie *free_cookie;
beos_op_read *read;
beos_op_write *write;
beos_op_readv *readv;
beos_op_writev *writev;
beos_op_ioctl *ioctl;
beos_op_setflags *setflags;
beos_op_rstat *rstat;
beos_op_wstat *wstat;
beos_op_fsync *fsync;
beos_op_initialize *initialize;
beos_op_mount *mount;
beos_op_unmount *unmount;
beos_op_sync *sync;
beos_op_rfsstat *rfsstat;
beos_op_wfsstat *wfsstat;
beos_op_select *select;
beos_op_deselect *deselect;
beos_op_open_indexdir *open_indexdir;
beos_op_close_indexdir *close_indexdir;
beos_op_free_cookie *free_indexdircookie;
beos_op_rewind_indexdir *rewind_indexdir;
beos_op_read_indexdir *read_indexdir;
beos_op_create_index *create_index;
beos_op_remove_index *remove_index;
beos_op_rename_index *rename_index;
beos_op_stat_index *stat_index;
beos_op_open_attrdir *open_attrdir;
beos_op_close_attrdir *close_attrdir;
beos_op_free_cookie *free_attrdircookie;
beos_op_rewind_attrdir *rewind_attrdir;
beos_op_read_attrdir *read_attrdir;
beos_op_write_attr *write_attr;
beos_op_read_attr *read_attr;
beos_op_remove_attr *remove_attr;
beos_op_rename_attr *rename_attr;
beos_op_stat_attr *stat_attr;
beos_op_open_query *open_query;
beos_op_close_query *close_query;
beos_op_free_cookie *free_querycookie;
beos_op_read_query *read_query;
} beos_vnode_ops;
#endif