UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2013 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 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 /* VFS_H */ 104 105