diff -r 923a4528a2ae -r d53fd1006485 dav/tags.c --- a/dav/tags.c Thu Mar 14 17:43:31 2019 +0100 +++ b/dav/tags.c Fri Mar 15 20:30:09 2019 +0100 @@ -34,6 +34,8 @@ #include #include +#include + #include "libxattr.h" #include "tags.h" @@ -50,6 +52,11 @@ free(tag); } +void free_taglist(UcxList *list) { + ucx_list_free_content(list, (ucx_destructor)free_dav_tag); + ucx_list_free(list); +} + int compare_tagname(DavTag* left, DavTag* right, void* ignorecase) { sstr_t leftname = sstr(left->name); sstr_t rightname = sstr(right->name); @@ -359,6 +366,38 @@ #endif +int compare_taglists(UcxList *tags1, UcxList *tags2) { + if(!tags1) { + return tags2 ? 0 : 1; + } + if(!tags2) { + return tags1 ? 0 : 1; + } + + UcxMap *map1 = ucx_map_new(32); + UCX_FOREACH(elm, tags1) { + DavTag *t = elm->data; + ucx_map_cstr_put(map1, t->name, t); + } + + int equal = 1; + int i = 0; + UCX_FOREACH(elm, tags2) { + DavTag *t = elm->data; + if(!ucx_map_cstr_get(map1, t->name)) { + equal = 0; + break; + } + i++; + } + + if(i != map1->count) { + equal = 0; + } + ucx_map_free(map1); + return equal; +} + /* ----------- ----------- tag filter ---------------------- */ static size_t rtrimskip(scstr_t str, size_t skip) {