#ifndef VFS_H
#define VFS_H
#include "../public/vfs.h"
#include "acl.h"
#ifdef __cplusplus
extern "C" {
#endif
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();
typedef int(*vfs_op_f)(VFSContext *,
char *);
typedef int(*sys_op_f)(VFSContext *,
char *, SysACL *);
int vfs_path_op(VFSContext *ctx,
char *path, vfs_op_f op,
uint32_t access);
SYS_FILE sys_vfs_open(VFSContext *ctx,
char *path,
int oflags);
int sys_vfs_stat(VFSContext *ctx,
char *path,
struct stat *buf);
int sys_vfs_fstat(VFSContext *ctx,
SYS_FILE fd,
struct stat *buf);
VFS_DIR sys_vfs_opendir(VFSContext *ctx,
char *path);
int sys_vfs_mkdir(VFSContext *ctx,
char *path);
int sys_vfs_unlink(VFSContext *ctx,
char *path);
int sys_path_op(VFSContext *ctx,
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,
char *path, SysACL *sysacl);
int sys_unlink(VFSContext *ctx,
char *path, SysACL *sysacl);
void vfs_queue_aio(aiocb_s *aiocb, VFSAioOp op);
#ifdef __cplusplus
}
#endif
#endif