dav/scfg.c

changeset 244
47791bdf1725
parent 233
d8042cede66c
child 246
470f0c2e505e
--- a/dav/scfg.c	Wed Jul 13 12:03:04 2016 +0200
+++ b/dav/scfg.c	Wed Jul 13 14:29:50 2016 +0200
@@ -120,6 +120,27 @@
     }
 }
 
+static int scfg_load_filter(xmlNode *node, UcxList **include, UcxList **exclude) {
+    node = node->children;
+    
+    while(node) {
+        if(node->type == XML_ELEMENT_NODE) {
+            char *value = util_xml_get_text(node);
+            if(!value) {
+                return 1;
+            } else if(xstreq(node->name, "include")) {
+                *include = add_regex_pattern(*include, value);
+            } else if(xstreq(node->name, "exclude")) {
+                *exclude = add_regex_pattern(*exclude, value);
+            }
+        }
+        
+        node = node->next;
+    }
+    
+    return 0;
+}
+
 int scfg_load_directory(xmlNode *node) {
     char *name = NULL;
     char *path = NULL;
@@ -129,7 +150,7 @@
     char *database = NULL;
     UcxList *include = NULL;
     UcxList *exclude = NULL;
-    int max_retry = DAV_MAX_RETRY;
+    int max_retry = 0;
     bool backuppull = false;
     bool lockpull = false;
     bool lockpush = false;
@@ -150,18 +171,18 @@
                 collection = value;
             } else if(xstreq(node->name, "repository")) {
                 repository = value;
+            } else if(xstreq(node->name, "filter")) {
+                if(scfg_load_filter(node, &include, &exclude)) {
+                    return -1;
+                }
             } else if(xstreq(node->name, "database")) {
                 database = value;
-            } else if(xstreq(node->name, "include")) {
-                include = add_regex_pattern(include, value);
-            } else if(xstreq(node->name, "exclude")) {
-                exclude = add_regex_pattern(exclude, value);
             } else if(xstreq(node->name, "max-retry")) {
                 int64_t i;
-                if(util_strtoint(value, &i)) {
+                if(util_strtoint(value, &i) && i >= 0) {
                     max_retry = (int)i;
                 } else {
-                    fprintf(stderr, "Warnung: sync.xml: integer value "
+                    fprintf(stderr, "Warnung: sync.xml: unsigned integer value "
                                     "expected in <max-retry> element\n");
                 }
             } else if(xstreq(node->name, "backup-on-pull")) {

mercurial