dav/tags.c

changeset 524
d53fd1006485
parent 510
d6e801f97e7a
child 525
26a1d5b9d9d2
--- 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 <ucx/string.h>
 #include <ucx/utils.h>
 
+#include <libidav/crypto.h>
+
 #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) {

mercurial