diff -r ae61523bce20 -r 2f71f4ee247a libidav/resource.c --- a/libidav/resource.c Thu Oct 03 18:52:51 2024 +0200 +++ b/libidav/resource.c Sun Oct 06 18:18:04 2024 +0200 @@ -127,7 +127,6 @@ if(!properties) return; CxIterator i = cxMapIteratorValues(properties); - DavProperty *property; cx_foreach(DavProperty*, property, i) { // TODO: free everything dav_session_free(sn, property); @@ -607,11 +606,16 @@ return property; } -void dav_set_string_property(DavResource *res, char *name, char *value) { +int dav_set_string_property(DavResource *res, char *name, char *value) { char *pns; char *pname; dav_get_property_namespace_str(res->session->context, name, &pns, &pname); + if(!pns) { + res->session->errorstr = "Property namespace not found"; + return 1; + } dav_set_string_property_ns(res, pns, pname, value); + return 0; } static int add2propertylist(const CxAllocator *a, CxList **list, DavProperty *property) { @@ -730,7 +734,7 @@ DavPropName* dav_get_property_names(DavResource *res, size_t *count) { DavResourceData *data = res->data; - *count = data->properties->size; + *count = cxMapSize(data->properties); DavPropName *names = dav_session_calloc( res->session, *count, @@ -738,15 +742,10 @@ CxIterator i = cxMapIteratorValues(data->properties); - DavProperty *value; - int j = 0; cx_foreach(DavProperty*, value, i) { - DavPropName *name = &names[j]; - + DavPropName *name = &names[i.index]; name->ns = value->ns->name; name->name = value->name; - - j++; } qsort(names, *count, sizeof(DavPropName), compare_propname); @@ -998,7 +997,7 @@ if(data->crypto_remove) { CxIterator i = cxListIterator(data->crypto_remove); cx_foreach(DavProperty *, property, i) { - if(crypto_props->size == 0) { + if(cxMapSize(crypto_props) == 0) { break; // map already empty, can't remove any more } @@ -1509,14 +1508,13 @@ // create an xml document containing all properties CxMap *nsmap = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); - nsmap->simple_destructor = free; + cxDefineDestructor(nsmap, free); cxMapPut(nsmap, cx_hash_key_str("DAV:"), strdup("D")); cxBufferPutString(content, "\n"); cxBufferPutString(content, "\n"); CxIterator i = cxMapIteratorValues(properties); - DavProperty *prop; cx_foreach(DavProperty*, prop, i) { DavXmlNode pnode; pnode.type = DAV_XML_ELEMENT; @@ -1600,15 +1598,15 @@ dav_session_strdup(sn, (const char*)n->ns->prefix) : NULL; property->value = n->children ? dav_convert_xml(sn, n->children) : NULL; - cxmutstr key = dav_property_key(property->ns->name, property->name); - cxMapPut(map, cx_hash_key(key.ptr, key.length), property); - free(key.ptr); + cxmutstr propkey = dav_property_key(property->ns->name, property->name); + cxMapPut(map, cx_hash_key_cxstr(propkey), property); + cx_strfree(&propkey); } n = n->next; } xmlFreeDoc(doc); - if(map->size == 0) { + if(cxMapSize(map) == 0) { cxMapDestroy(map); return NULL; }