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); |