1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef VFS_H
30 #define VFS_H
31
32 #include "../public/vfs.h"
33 #include "acl.h"
34
35 #include <cx/string.h>
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 typedef struct VfsType {
42 vfs_init_func init;
43 vfs_create_func create;
44 } VfsType;
45
46 typedef struct SysVFSDir {
47 DIR *dir;
48 struct dirent *cur;
49 } SysVFSDir;
50
51 enum VFSAioOp {
52 VFS_AIO_READ =
0,
53 VFS_AIO_WRITE
54 };
55 typedef enum VFSAioOp VFSAioOp;
56
57 int vfs_init(
void);
58 VfsType* vfs_get_type(cxstring vfs_class);
59
60 void* vfs_init_backend(ServerConfiguration *cfg,
pool_handle_t *pool, VfsType *vfs_class, WSConfigNode *config,
int *error);
61
62 typedef int(*vfs_op_f)(VFSContext *,
const char *);
63 typedef int(*sys_op_f)(VFSContext *,
const char *, SysACL *);
64 int vfs_path_op(VFSContext *ctx,
const char *path, vfs_op_f op,
uint32_t access);
65
66 SYS_FILE sys_vfs_open(VFSContext *ctx,
const char *path,
int oflags);
67 int sys_vfs_stat(VFSContext *ctx,
const char *path,
struct stat *buf);
68 int sys_vfs_fstat(VFSContext *ctx,
SYS_FILE fd,
struct stat *buf);
69 VFS_DIR sys_vfs_opendir(VFSContext *ctx,
const char *path);
70 VFS_DIR sys_vfs_fdopendir(VFSContext *ctx,
SYS_FILE fd);
71 int sys_vfs_mkdir(VFSContext *ctx,
const char *path);
72 int sys_vfs_unlink(VFSContext *ctx,
const char *path);
73 int sys_vfs_rmdir(VFSContext *ctx,
const char *path);
74
75 int sys_path_op(VFSContext *ctx,
const char *path, sys_op_f op);
76 int sys_acl_check(VFSContext *ctx,
uint32_t access_mask, SysACL *externacl);
77 void sys_set_error_status(VFSContext *ctx);
78
79 ssize_t sys_file_read(
SYS_FILE fd,
void *buf,
size_t nbyte);
80 ssize_t sys_file_write(
SYS_FILE fd,
const void *buf,
size_t nbyte);
81 ssize_t sys_file_pread(
SYS_FILE fd,
void *buf,
size_t nbyte,
off_t offset);
82 ssize_t sys_file_pwrite(
SYS_FILE fd,
const void *buf,
size_t nbyte,
off_t offset);
83 off_t sys_file_seek(
SYS_FILE fd,
off_t offset,
int whence);
84 void sys_file_close(
SYS_FILE fd);
85 int sys_file_aioread(aiocb_s *aiocb);
86 int sys_file_aiowrite(aiocb_s *aiocb);
87
88 int sys_dir_read(
VFS_DIR dir,
VFS_ENTRY *entry,
int getstat);
89 void sys_dir_close(
VFS_DIR dir);
90
91 int sys_mkdir(VFSContext *ctx,
const char *path, SysACL *sysacl);
92 int sys_unlink(VFSContext *ctx,
const char *path, SysACL *sysacl);
93 int sys_rmdir(VFSContext *ctx,
const char *path, SysACL *sysacl);
94
95 NSAPI_PUBLIC int vfs_is_sys(
VFS *vfs);
96
97 void vfs_queue_aio(aiocb_s *aiocb, VFSAioOp op);
98
99 #ifdef __cplusplus
100 }
101 #endif
102
103 #endif
104
105