--- a/libidav/webdav.c Sun Jun 16 13:14:24 2019 +0200 +++ b/libidav/webdav.c Sat Jun 22 16:36:52 2019 +0200 @@ -70,61 +70,24 @@ } // add DAV: namespace - DavNamespace *davns = malloc(sizeof(DavNamespace)); - if(!davns) { - free(davns); - dav_context_destroy(context); - return NULL; - } - davns->prefix = strdup("D"); - if(!davns->prefix) { - free(davns); - dav_context_destroy(context); - return NULL; - } - davns->name = strdup("DAV:"); - if(!davns->name) { - free(davns->prefix); - free(davns); - dav_context_destroy(context); - return NULL; - } - if(ucx_map_cstr_put(context->namespaces, "D", davns)) { - free(davns->prefix); - free(davns->name); - free(davns); + if(dav_add_namespace(context, "D", "DAV:")) { dav_context_destroy(context); return NULL; } + // add idav namespace - DavNamespace *idavns = malloc(sizeof(DavNamespace)); - if(!idavns) { - free(idavns); - dav_context_destroy(context); - return NULL; - } - idavns->prefix = strdup("idav"); - if(!idavns->prefix) { - free(idavns); - dav_context_destroy(context); - return NULL; - } - idavns->name = strdup(DAV_NS); - if(!idavns->name) { - free(idavns->prefix); - free(idavns); - dav_context_destroy(context); - return NULL; - } - if(ucx_map_cstr_put(context->namespaces, "idav", idavns)) { - free(idavns->prefix); - free(idavns->name); - free(idavns); + if(dav_add_namespace(context, "idav", DAV_NS)) { dav_context_destroy(context); return NULL; } + // add idavprops namespace + if(dav_add_namespace(context, "idavprops", DAV_PROPS_NS)) { + dav_context_destroy(context); + return NULL; + } + return context; } @@ -195,9 +158,24 @@ if(!namespace) { return 1; } - namespace->prefix = strdup(prefix); - namespace->name = strdup(name); - return ucx_map_cstr_put(context->namespaces, prefix, namespace); + + char *p = strdup(prefix); + char *n = strdup(name); + + int err = 0; + if(p && n) { + namespace->prefix = p; + namespace->name = n; + err = ucx_map_cstr_put(context->namespaces, prefix, namespace); + } + + if(err) { + free(namespace); + if(p) free(p); + if(n) free(n); + } + + return err; } DavNamespace* dav_get_namespace(DavContext *context, const char *prefix) {