#ifndef VFS_H
#define VFS_H
#include "../public/vfs.h"
#include "acl.h"
#include <cx/string.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct VfsType {
vfs_init_func init;
vfs_create_func create;
} VfsType;
typedef struct SysVFSDir {
DIR *dir;
struct dirent *cur;
} SysVFSDir;
enum VFSAioOp {
VFS_AIO_READ =
0,
VFS_AIO_WRITE
};
typedef enum VFSAioOp VFSAioOp;
int vfs_init(
void);
VfsType* vfs_get_type(cxstring vfs_class);
void* vfs_init_backend(ServerConfiguration *cfg,
pool_handle_t *pool, VfsType *vfs_class, WSConfigNode *config,
int *error);
typedef int(*vfs_op_f)(VFSContext *,
const char *);
typedef int(*sys_op_f)(VFSContext *,
const char *, SysACL *);
int vfs_path_op(VFSContext *ctx,
const char *path, vfs_op_f op,
uint32_t access);
SYS_FILE sys_vfs_open(VFSContext *ctx,
const char *path,
int oflags);
int sys_vfs_stat(VFSContext *ctx,
const char *path,
struct stat *buf);
int sys_vfs_fstat(VFSContext *ctx,
SYS_FILE fd,
struct stat *buf);
VFS_DIR sys_vfs_opendir(VFSContext *ctx,
const char *path);
VFS_DIR sys_vfs_fdopendir(VFSContext *ctx,
SYS_FILE fd);
int sys_vfs_mkdir(VFSContext *ctx,
const char *path);
int sys_vfs_unlink(VFSContext *ctx,
const char *path);
int sys_vfs_rmdir(VFSContext *ctx,
const char *path);
int sys_path_op(VFSContext *ctx,
const char *path, sys_op_f op);
int sys_acl_check(VFSContext *ctx,
uint32_t access_mask, SysACL *externacl);
void sys_set_error_status(VFSContext *ctx);
ssize_t sys_file_read(
SYS_FILE fd,
void *buf,
size_t nbyte);
ssize_t sys_file_write(
SYS_FILE fd,
const void *buf,
size_t nbyte);
ssize_t sys_file_pread(
SYS_FILE fd,
void *buf,
size_t nbyte,
off_t offset);
ssize_t sys_file_pwrite(
SYS_FILE fd,
const void *buf,
size_t nbyte,
off_t offset);
off_t sys_file_seek(
SYS_FILE fd,
off_t offset,
int whence);
void sys_file_close(
SYS_FILE fd);
int sys_file_aioread(aiocb_s *aiocb);
int sys_file_aiowrite(aiocb_s *aiocb);
int sys_dir_read(
VFS_DIR dir,
VFS_ENTRY *entry,
int getstat);
void sys_dir_close(
VFS_DIR dir);
int sys_mkdir(VFSContext *ctx,
const char *path, SysACL *sysacl);
int sys_unlink(VFSContext *ctx,
const char *path, SysACL *sysacl);
int sys_rmdir(VFSContext *ctx,
const char *path, SysACL *sysacl);
NSAPI_PUBLIC int vfs_is_sys(
VFS *vfs);
void vfs_queue_aio(aiocb_s *aiocb, VFSAioOp op);
#ifdef __cplusplus
}
#endif
#endif