| 279 resource->path); |
279 resource->path); |
| 280 } |
280 } |
| 281 return resource->href; |
281 return resource->href; |
| 282 } |
282 } |
| 283 |
283 |
| |
284 CxTreeIterator dav_resource_iterator(DavResource *res) { |
| |
285 return cx_tree_iterator(res, FALSE, offsetof(DavResource, children), offsetof(DavResource, next)); |
| |
286 } |
| |
287 |
| |
288 CxTreeVisitor dav_resource_visitor(DavResource *res) { |
| |
289 return cx_tree_visitor(res, offsetof(DavResource, children), offsetof(DavResource, next)); |
| |
290 } |
| |
291 |
| |
292 CxMap* dav_resource_map(DavResource *res) { |
| |
293 CxMap *map = cxHashMapCreate(res->session->mp->allocator, CX_STORE_POINTERS, 16); |
| |
294 if(!map) { |
| |
295 return NULL; |
| |
296 } |
| |
297 CxTreeIterator i = dav_resource_iterator(res); |
| |
298 int error = 0; |
| |
299 cx_foreach(DavResource *, res, i) { |
| |
300 if(cxMapPut(map, res->path, res)) { |
| |
301 error = 1; |
| |
302 } |
| |
303 } |
| |
304 if(!error) { |
| |
305 cxMapRehash(map); |
| |
306 return map; |
| |
307 } else { |
| |
308 cxMapFree(map); |
| |
309 return NULL; |
| |
310 } |
| |
311 } |
| |
312 |
| 284 void resource_add_prop(DavResource *res, const char *ns, const char *name, DavXmlNode *val) { |
313 void resource_add_prop(DavResource *res, const char *ns, const char *name, DavXmlNode *val) { |
| 285 DavSession *sn = res->session; |
314 DavSession *sn = res->session; |
| 286 |
315 |
| 287 DavNamespace *namespace = dav_session_malloc(sn, sizeof(DavNamespace)); |
316 DavNamespace *namespace = dav_session_malloc(sn, sizeof(DavNamespace)); |
| 288 namespace->prefix = NULL; |
317 namespace->prefix = NULL; |