src/server/daemon/vfs.c

branch
webdav
changeset 366
47bc686fafe4
parent 345
5832e10fc59a
child 415
d938228c382e
equal deleted inserted replaced
361:570026d3a685 366:47bc686fafe4
85 return -1; 85 return -1;
86 } 86 }
87 return 0; 87 return 0;
88 } 88 }
89 89
90 int vfs_register_type(const char *name, vfs_create_func vfsCreate) { 90 int vfs_register_type(const char *name, vfs_init_func vfsInit, vfs_create_func vfsCreate) {
91 WS_ASSERT(name); 91 WS_ASSERT(name);
92 92
93 if(!vfs_type_map) { 93 if(!vfs_type_map) {
94 if(vfs_init()) { 94 if(vfs_init()) {
95 return 1; 95 return 1;
96 } 96 }
97 } 97 }
98 return ucx_map_cstr_put(vfs_type_map, name, vfsCreate); 98
99 } 99 VfsType *vfsType = malloc(sizeof(VfsType));
100 100 if(!vfsType) {
101 101 return 1;
102 VFS* vfs_create(Session *sn, Request *rq, const char *vfs_class, pblock *pb) { 102 }
103 vfs_create_func createVFS = ucx_map_cstr_get(vfs_type_map, vfs_class); 103 vfsType->init = vfsInit;
104 if(!createVFS) { 104 vfsType->create = vfsCreate;
105
106 return ucx_map_cstr_put(vfs_type_map, name, vfsType);
107 }
108
109 VfsType* vfs_get_type(scstr_t vfs_class) {
110 return ucx_map_sstr_get(vfs_type_map, vfs_class);
111 }
112
113 void* vfs_init_backend(ServerConfiguration *cfg, pool_handle_t *pool, VfsType *vfs_class, WSConfigNode *config, int *error) {
114 *error = 0;
115 if(vfs_class->init) {
116 void *initData = vfs_class->init(cfg, pool, config);
117 if(!initData) {
118 *error = 1;
119 }
120 return initData;
121 } else {
122 return NULL;
123 }
124 }
125
126 VFS* vfs_create(Session *sn, Request *rq, const char *vfs_class, pblock *pb, void *initData) {
127 VfsType *vfsType = ucx_map_cstr_get(vfs_type_map, vfs_class);
128 if(!vfsType) {
105 log_ereport(LOG_MISCONFIG, "vfs_create: unkown VFS type %s", vfs_class); 129 log_ereport(LOG_MISCONFIG, "vfs_create: unkown VFS type %s", vfs_class);
106 return NULL; 130 return NULL;
107 } 131 }
108 132
109 return createVFS(sn, rq, pb); 133 return vfsType->create(sn, rq, pb, initData);
110 } 134 }
111 135
112 VFSContext* vfs_request_context(Session *sn, Request *rq) { 136 VFSContext* vfs_request_context(Session *sn, Request *rq) {
113 WS_ASSERT(sn); 137 WS_ASSERT(sn);
114 WS_ASSERT(rq); 138 WS_ASSERT(rq);

mercurial