--- a/libidav/methods.c Sun Dec 07 20:16:59 2025 +0100 +++ b/libidav/methods.c Fri Dec 19 17:53:18 2025 +0100 @@ -74,7 +74,7 @@ curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, cxBufferWrite); curl_easy_setopt(handle, CURLOPT_WRITEDATA, response); CxMap *respheaders = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 32); - cxDefineDestructor(respheaders, free); + cxSetDestructor(respheaders, free); util_capture_header(handle, respheaders); for(int i=0;i<maxretry;i++) { @@ -122,39 +122,39 @@ } CxBuffer* create_allprop_propfind_request(void) { - CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:propfind xmlns:D=\"DAV:\">\n"); + s = cx_str("<D:propfind xmlns:D=\"DAV:\">\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:allprop/></D:propfind>\n"); + s = cx_str("<D:allprop/></D:propfind>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); return buf; } CxBuffer* create_cryptoprop_propfind_request(void) { - CxBuffer *buf = cxBufferCreate(NULL, 256, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 256, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:propfind xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n"); + s = cx_str("<D:propfind xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:prop><idav:crypto-prop/></D:prop></D:propfind>\n"); + s = cx_str("<D:prop><idav:crypto-prop/></D:prop></D:propfind>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); return buf; } CxBuffer* create_propfind_request(DavSession *sn, CxList *properties, char *rootelm, DavBool nocrypt) { - CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; int add_crypto_name = 1; @@ -193,7 +193,7 @@ cxMapPut(namespaces, cx_hash_key_str("idav"), &idav_ns); } - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // write root element and namespaces @@ -201,31 +201,31 @@ CxMapIterator mapi = cxMapIteratorValues(namespaces); cx_foreach(DavNamespace*, ns, mapi) { - s = CX_STR(" xmlns:"); + s = cx_str(" xmlns:"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(ns->prefix); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("=\""); + s = cx_str("=\""); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(ns->name); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("\""); + s = cx_str("\""); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR(">\n"); + s = cx_str(">\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // default properties - s = CX_STR("<D:prop>\n"); + s = cx_str("<D:prop>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:creationdate />\n<D:getlastmodified />\n"); + s = cx_str("<D:creationdate />\n<D:getlastmodified />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:getcontentlength />\n<D:getcontenttype />\n"); + s = cx_str("<D:getcontentlength />\n<D:getcontenttype />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:resourcetype />\n"); + s = cx_str("<D:resourcetype />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // crypto properties @@ -233,19 +233,19 @@ if(add_crypto_name) { cxBufferPut(buf, '<'); cxBufferPutString(buf, crypto_ns); - s = CX_STR(":crypto-name />\n"); + s = cx_str(":crypto-name />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } if(add_crypto_key) { cxBufferPut(buf, '<'); cxBufferPutString(buf, crypto_ns); - s = CX_STR(":crypto-key />\n"); + s = cx_str(":crypto-key />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } if(add_crypto_hash) { cxBufferPut(buf, '<'); cxBufferPutString(buf, crypto_ns); - s = CX_STR(":crypto-hash />\n"); + s = cx_str(":crypto-hash />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } } @@ -254,15 +254,15 @@ if(properties) { CxIterator i = cxListIterator(properties); cx_foreach(DavProperty*, prop, i) { - s = CX_STR("<"); + s = cx_str("<"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(prop->ns->prefix); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(":"); + s = cx_str(":"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(prop->name); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(" />\n"); + s = cx_str(" />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } } @@ -275,35 +275,35 @@ } CxBuffer* create_basic_propfind_request(void) { - CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:propfind xmlns:D=\"DAV:\" xmlns:i=\""); + s = cx_str("<D:propfind xmlns:D=\"DAV:\" xmlns:i=\""); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(DAV_NS); + s = cx_str(DAV_NS); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("\" >\n"); + s = cx_str("\" >\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // properties - s = CX_STR("<D:prop>\n"); + s = cx_str("<D:prop>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:resourcetype />\n"); + s = cx_str("<D:resourcetype />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<i:crypto-key />\n"); + s = cx_str("<i:crypto-key />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<i:crypto-name />\n"); + s = cx_str("<i:crypto-name />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<i:crypto-hash />\n"); + s = cx_str("<i:crypto-hash />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("</D:prop>\n"); + s = cx_str("</D:prop>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // end - s = CX_STR("</D:propfind>\n"); + s = cx_str("</D:propfind>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); return buf; @@ -356,7 +356,7 @@ char *crypto_name = NULL; // name set by crypto-name property char *crypto_key = NULL; - result->properties = cxLinkedListCreateSimple(CX_STORE_POINTERS); // xmlNode list + result->properties = cxLinkedListCreate(NULL, CX_STORE_POINTERS); // xmlNode list xmlNode *node = parser->current->children; while(node) { @@ -389,7 +389,7 @@ return -1; } status_str = cx_strsubsl(status_str, 9, 3); - if(!cx_strcmp(status_str, CX_STR("200"))) { + if(!cx_strcmp(status_str, cx_str("200"))) { ok = 1; } } @@ -590,7 +590,7 @@ //DavResource *res = resource; DavResource *res = NULL; const char *href = NULL; - CxList *properties = cxLinkedListCreateSimple(CX_STORE_POINTERS); // xmlNode list + CxList *properties = cxLinkedListCreate(NULL, CX_STORE_POINTERS); // xmlNode list char *crypto_name = NULL; // name set by crypto-name property char *crypto_key = NULL; @@ -639,7 +639,7 @@ return 1; } status_str = cx_strsubsl(status_str, 9, 3); - if(!cx_strcmp(status_str, CX_STR("200"))) { + if(!cx_strcmp(status_str, cx_str("200"))) { ok = 1; } } @@ -822,11 +822,11 @@ } CxBuffer* create_proppatch_request(DavResourceData *data) { - CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; CxMap *namespaces = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); - cxDefineDestructor(namespaces, free); + cxSetDestructor(namespaces, free); { char prefix[8]; @@ -851,30 +851,30 @@ } } - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // write root element and namespaces - s = CX_STR("<D:propertyupdate xmlns:D=\"DAV:\""); + s = cx_str("<D:propertyupdate xmlns:D=\"DAV:\""); cxBufferWrite(s.ptr, 1, s.length, buf); CxMapIterator mapi = cxMapIterator(namespaces); cx_foreach(CxMapEntry*, entry, mapi) { - s = CX_STR(" xmlns:"); + s = cx_str(" xmlns:"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(entry->value); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("=\""); + s = cx_str("=\""); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_strn(entry->key->data, entry->key->len); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("\""); + s = cx_str("\""); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR(">\n"); + s = cx_str(">\n"); cxBufferWrite(s.ptr, 1, s.length, buf); if(data->set) { - s = CX_STR("<D:set>\n<D:prop>\n"); + s = cx_str("<D:set>\n<D:prop>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); CxIterator i = cxListIterator(data->set); cx_foreach(DavProperty*, property, i) { @@ -884,15 +884,15 @@ } // begin tag - s = CX_STR("<"); + s = cx_str("<"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(prefix); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(":"); + s = cx_str(":"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(property->name); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(">"); + s = cx_str(">"); cxBufferWrite(s.ptr, 1, s.length, buf); // content @@ -904,43 +904,43 @@ } // end tag - s = CX_STR("</"); + s = cx_str("</"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(prefix); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(":"); + s = cx_str(":"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(property->name); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(">\n"); + s = cx_str(">\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR("</D:prop>\n</D:set>\n"); + s = cx_str("</D:prop>\n</D:set>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } if(data->remove) { - s = CX_STR("<D:remove>\n<D:prop>\n"); + s = cx_str("<D:remove>\n<D:prop>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); CxIterator i = cxListIterator(data->remove); cx_foreach(DavProperty*, property, i) { char *prefix = cxMapGet(namespaces, cx_hash_key_str(property->ns->name)); - s = CX_STR("<"); + s = cx_str("<"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(prefix); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(":"); + s = cx_str(":"); cxBufferWrite(s.ptr, 1, s.length, buf); s = cx_str(property->name); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR(" />\n"); + s = cx_str(" />\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR("</D:prop>\n</D:remove>\n"); + s = cx_str("</D:prop>\n</D:remove>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR("</D:propertyupdate>\n"); + s = cx_str("</D:propertyupdate>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); // cleanup namespace map @@ -950,43 +950,43 @@ } CxBuffer* create_crypto_proppatch_request(DavSession *sn, DavKey *key, const char *name, const char *hash) { - CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:propertyupdate xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n"); + s = cx_str("<D:propertyupdate xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:set>\n<D:prop>\n"); + s = cx_str("<D:set>\n<D:prop>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); if(DAV_ENCRYPT_NAME(sn)) { - s = CX_STR("<idav:crypto-name>"); + s = cx_str("<idav:crypto-name>"); cxBufferWrite(s.ptr, 1, s.length, buf); char *crname = aes_encrypt(name, strlen(name), key); cxBufferPutString(buf, crname); free(crname); - s = CX_STR("</idav:crypto-name>\n"); + s = cx_str("</idav:crypto-name>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR("<idav:crypto-key>"); + s = cx_str("<idav:crypto-key>"); cxBufferWrite(s.ptr, 1, s.length, buf); cxBufferPutString(buf, key->name); - s = CX_STR("</idav:crypto-key>\n"); + s = cx_str("</idav:crypto-key>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); if(hash) { - s = CX_STR("<idav:crypto-hash>"); + s = cx_str("<idav:crypto-hash>"); cxBufferWrite(s.ptr, 1, s.length, buf); cxBufferPutString(buf, hash); - s = CX_STR("</idav:crypto-hash>\n"); + s = cx_str("</idav:crypto-hash>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); } - s = CX_STR("</D:prop>\n</D:set>\n</D:propertyupdate>\n"); + s = cx_str("</D:prop>\n</D:set>\n</D:propertyupdate>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); return buf; @@ -1025,7 +1025,7 @@ CxBuffer *buf = NULL; if(!read_func) { - buf = cxBufferCreate(data, length, cxDefaultAllocator, 0); + buf = cxBufferCreate(cxDefaultAllocator, data, length, 0); buf->size = length; data = buf; read_func = (dav_read_func)cxBufferRead; @@ -1148,7 +1148,7 @@ free(ltheader); } //cxstring deststr = ucx_sprintf("Destination: %s", dest); - cxmutstr deststr = cx_strcat(2, CX_STR("Destination: "), cx_str(dest)); + cxmutstr deststr = cx_strcat(2, cx_str("Destination: "), cx_str(dest)); headers = curl_slist_append(headers, deststr.ptr); if(override) { headers = curl_slist_append(headers, "Overwrite: T"); @@ -1167,19 +1167,19 @@ CxBuffer* create_lock_request(void) { - CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); cxstring s; - s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); + s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("<D:lockinfo xmlns:D=\"DAV:\">\n" + s = cx_str("<D:lockinfo xmlns:D=\"DAV:\">\n" "<D:lockscope><D:exclusive/></D:lockscope>\n" "<D:locktype><D:write/></D:locktype>\n" "<D:owner><D:href>http://davutils.org/libidav/</D:href></D:owner>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); - s = CX_STR("</D:lockinfo>\n"); + s = cx_str("</D:lockinfo>\n"); cxBufferWrite(s.ptr, 1, s.length, buf); return buf;