src/server/daemon/vfs.c

branch
webdav
changeset 276
0cb4eda146c4
parent 269
3dfbd0b91950
child 277
7608af69739f
equal deleted inserted replaced
275:535004faa1a5 276:0cb4eda146c4
43 #include "event.h" 43 #include "event.h"
44 44
45 #define VFS_MALLOC(pool, size) pool ? pool_malloc(pool, size) : malloc(size) 45 #define VFS_MALLOC(pool, size) pool ? pool_malloc(pool, size) : malloc(size)
46 #define VFS_FREE(pool, ptr) pool ? pool_free(pool, ptr) : free(ptr) 46 #define VFS_FREE(pool, ptr) pool ? pool_free(pool, ptr) : free(ptr)
47 47
48 static UcxMap *vfs_map; 48 static UcxMap *vfs_type_map;
49 49
50 static VFS sys_vfs = { 50 static VFS sys_vfs = {
51 sys_vfs_open, 51 sys_vfs_open,
52 sys_vfs_stat, 52 sys_vfs_stat,
53 sys_vfs_fstat, 53 sys_vfs_fstat,
77 sys_dir_read, 77 sys_dir_read,
78 sys_dir_close 78 sys_dir_close
79 }; 79 };
80 80
81 int vfs_init() { 81 int vfs_init() {
82 vfs_map = ucx_map_new(16); 82 vfs_type_map = ucx_map_new(16);
83 if(!vfs_map) { 83 if(!vfs_type_map) {
84 return -1; 84 return -1;
85 } 85 }
86 return 0; 86 return 0;
87 } 87 }
88 88
89 void vfs_add(char *name, VFS *vfs) { 89 int vfs_register_type(const char *name, vfs_create_func vfsCreate) {
90 WS_ASSERT(name); 90 WS_ASSERT(name);
91 91
92 if(!vfs_map) { 92 if(!vfs_type_map) {
93 vfs_init(); 93 if(vfs_init()) {
94 } 94 return 1;
95 ucx_map_cstr_put(vfs_map, name, vfs); 95 }
96 }
97 return ucx_map_cstr_put(vfs_type_map, name, vfsCreate);
96 } 98 }
97 99
98 VFSContext* vfs_request_context(Session *sn, Request *rq) { 100 VFSContext* vfs_request_context(Session *sn, Request *rq) {
99 WS_ASSERT(sn); 101 WS_ASSERT(sn);
100 WS_ASSERT(rq); 102 WS_ASSERT(rq);

mercurial