dav/scfg.c

Wed, 13 Jul 2016 14:29:50 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 13 Jul 2016 14:29:50 +0200
changeset 244
47791bdf1725
parent 233
d8042cede66c
child 246
470f0c2e505e
permissions
-rw-r--r--

changed max-retry meaning and filter configuration in sync.xml

prior to this change, max-retry was the number of trials. Now it is exactly the number of retries.

include and exclude filters are now surrounded by an filter element in sync.xml

46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
185
cd42cccee550 updated copyright notice
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 145
diff changeset
4 * Copyright 2016 Olaf Wintermann. All rights reserved.
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <string.h>
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
32 #include <errno.h>
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <libidav/utils.h>
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include <ucx/map.h>
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
35 #include <ucx/utils.h>
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #include "scfg.h"
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 #define xstreq(a,b) xmlStrEqual(BAD_CAST a, BAD_CAST b)
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 #ifdef _WIN32
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 #define ENV_HOME getenv("USERPROFILE")
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 #else
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 #define ENV_HOME getenv("HOME")
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 #endif /* _WIN32 */
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 static UcxMap *directories;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
49 static int create_default_sync_config(char *file) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
50 FILE *out = fopen(file, "w");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
51 if(!out) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
52 perror("fopen");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
53 return -1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
54 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
55
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
56 fputs("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n", out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
57 fputs("<configuration>\n", out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
58 fputs("</configuration>\n", out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
59 fclose(out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
60
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
61 return 0;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
62 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
63
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 int load_sync_config() {
202
faa41a5e817d fixed dav-sync crash when sync.xml is missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 200
diff changeset
65 directories = ucx_map_new(8);
faa41a5e817d fixed dav-sync crash when sync.xml is missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 200
diff changeset
66
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 char *file = util_concat_path(ENV_HOME, ".dav/sync.xml");
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
68
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
69 struct stat s;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
70 if(stat(file, &s)) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
71 switch(errno) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
72 case ENOENT: {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
73 if(create_default_sync_config(file)) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
74 return -1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
75 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
76 break;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
77 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
78 default: {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
79 perror("Cannot load sync.xml");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
80 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
81 }
222
7b73058d782e fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 221
diff changeset
82 free(file);
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
83 return 0;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
84 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
85
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 xmlDoc *doc = xmlReadFile(file, NULL, 0);
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 if(!doc) {
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
88 fprintf(stderr, "Broken configuration file\n");
222
7b73058d782e fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 221
diff changeset
89 free(file);
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 return -1;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 int ret = 0;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 xmlNode *node = xmlDocGetRootElement(doc)->children;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 while(node) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 if(node->type == XML_ELEMENT_NODE) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 if(xstreq(node->name, "directory")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 if(scfg_load_directory(node)) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 ret = 1;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 ucx_map_free(directories);
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 break;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 node = node->next;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 xmlFreeDoc(doc);
222
7b73058d782e fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 221
diff changeset
109 free(file);
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 return ret;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112
58
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
113 static UcxList* add_regex_pattern(UcxList *list, char *value) {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
114 regex_t *regex = malloc(sizeof(regex_t));
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
115 if (regcomp(regex, value, REG_EXTENDED|REG_NOSUB)) {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
116 fprintf(stderr, "Invalid regular expression (%s) ... skipped\n", value);
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
117 return list;
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
118 } else {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
119 return ucx_list_append(list, regex);
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
120 }
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
121 }
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
122
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
123 static int scfg_load_filter(xmlNode *node, UcxList **include, UcxList **exclude) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
124 node = node->children;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
125
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
126 while(node) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
127 if(node->type == XML_ELEMENT_NODE) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
128 char *value = util_xml_get_text(node);
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
129 if(!value) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
130 return 1;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
131 } else if(xstreq(node->name, "include")) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
132 *include = add_regex_pattern(*include, value);
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
133 } else if(xstreq(node->name, "exclude")) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
134 *exclude = add_regex_pattern(*exclude, value);
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
135 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
136 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
137
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
138 node = node->next;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
139 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
140
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
141 return 0;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
142 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
143
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 int scfg_load_directory(xmlNode *node) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 char *name = NULL;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 char *path = NULL;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
147 char *trash = NULL;
56
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
148 char *collection = NULL;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 char *repository = NULL;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 char *database = NULL;
58
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
151 UcxList *include = NULL;
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
152 UcxList *exclude = NULL;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
153 int max_retry = 0;
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
154 bool backuppull = false;
221
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
155 bool lockpull = false;
232
df3fa8637a58 disabled locking in dav-sync by default
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 226
diff changeset
156 bool lockpush = false;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 node = node->children;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 while(node) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 if(node->type == XML_ELEMENT_NODE) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 char *value = util_xml_get_text(node);
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 if(!value) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 // next
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 } else if(xstreq(node->name, "name")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 name = value;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 } else if(xstreq(node->name, "path")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 path = value;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
168 } else if(xstreq(node->name, "trash")) {
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
169 trash = value;
56
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
170 } else if(xstreq(node->name, "collection")) {
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
171 collection = value;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 } else if(xstreq(node->name, "repository")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 repository = value;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
174 } else if(xstreq(node->name, "filter")) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
175 if(scfg_load_filter(node, &include, &exclude)) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
176 return -1;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
177 }
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 } else if(xstreq(node->name, "database")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 database = value;
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
180 } else if(xstreq(node->name, "max-retry")) {
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
181 int64_t i;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
182 if(util_strtoint(value, &i) && i >= 0) {
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
183 max_retry = (int)i;
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
184 } else {
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
185 fprintf(stderr, "Warnung: sync.xml: unsigned integer value "
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
186 "expected in <max-retry> element\n");
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
187 }
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
188 } else if(xstreq(node->name, "backup-on-pull")) {
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
189 backuppull = util_getboolean(value);
221
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
190 } else if(xstreq(node->name, "lock-pull")) {
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
191 lockpull = util_getboolean(value);
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
192 } else if(xstreq(node->name, "lock-push")) {
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
193 lockpush = util_getboolean(value);
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 node = node->next;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 if(!name) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200 fprintf(stderr, "Missing name element for directory\n");
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 return -1;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203 if(!path) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 fprintf(stderr, "Missing path element for directory\n");
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205 return -1;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
206 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
207 if(!repository) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
208 fprintf(stderr, "Missing repository element for directory\n");
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
209 return -1;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
210 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
211 if(!database) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
212 fprintf(stderr, "Missing database element for directory\n");
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213 return -1;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
215
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
216 SyncDirectory *dir = malloc(sizeof(SyncDirectory));
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
217 dir->name = strdup(name);
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
218 dir->path = scfg_create_path(path);
56
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
219 dir->collection = collection ? strdup(collection) : NULL;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
220 dir->repository = strdup(repository);
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
221 dir->database = strdup(database);
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
222 dir->max_retry = max_retry;
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
223 dir->backuppull = backuppull;
221
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
224 dir->lockpull = lockpull;
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
225 dir->lockpush = lockpush;
58
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
226 if (include) {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
227 dir->include = include;
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
228 } else {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
229 regex_t *matchall = malloc(sizeof(regex_t));
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
230 regcomp(matchall, ".*", REG_NOSUB);
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
231 dir->include = ucx_list_append(NULL, matchall);
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
232 }
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
233 if (exclude) {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
234 dir->exclude = exclude;
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
235 } else {
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
236 regex_t *matchnothing = malloc(sizeof(regex_t));
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
237 regcomp(matchnothing, "///", REG_NOSUB);
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
238 dir->exclude = ucx_list_append(NULL, matchnothing);
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
239 }
66
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
240
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
241 if (trash && sstrtrim(sstr(trash)).length > 0) {
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
242 if (trash[0] == '/' || trash[0] == '$') {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
243 dir->trash = scfg_create_path(trash);
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
244 } else {
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
245 char *t = util_concat_path(dir->path, trash);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
246 dir->trash = util_concat_path(t, "/");
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
247 free(t);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
248 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
249
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
250 if(dir->trash[strlen(dir->trash)-1] != '/') {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
251 char *t = dir->trash;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
252 dir->trash = util_concat_path(t, "/");
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
253 free(t);
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
254 }
66
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
255 } else {
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
256 dir->trash = NULL;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
257 }
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
258
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
259 ucx_map_cstr_put(directories, name, dir);
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
260
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261 return 0;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
262 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
263
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
264 SyncDirectory* scfg_get_dir(char *name) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
265 return ucx_map_cstr_get(directories, name);
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
266 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
267
233
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
268 int scfg_check_dir(SyncDirectory *dir) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
269 struct stat s;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
270 if(stat(dir->path, &s)) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
271 int err = errno;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
272 if(err == ENOENT) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
273 fprintf(stderr, "directory %s does not exist.\n", dir->path);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
274 } else {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
275 fprintf(stderr, "Cannot stat directory %s.\n", dir->path);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
276 perror(NULL);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
277 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
278 fprintf(stderr, "Abort.\n");
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
279 return -1;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
280 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
281
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
282 if(dir->trash) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
283 // create trash directory
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
284 mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
285 if (util_mkdir(dir->trash, mode)) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
286 if (errno != EEXIST) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
287 fprintf(stderr, "Cannot create trash directory: %s\nAbort.\n", dir->trash);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
288 return -1;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
289 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
290 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
291 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
292
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
293 return 0;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
294 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
295
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
296 char* scfg_create_path(char *cfg) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
297 if(!cfg) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
298 return NULL;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
299 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
300 if(cfg[0] != '$') {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
301 return strdup(cfg);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
302 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
303
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
304 sstr_t s = sstr(cfg);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
305 sstr_t path = sstrchr(sstr(cfg), '/');
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
306 char *localpath = NULL;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
307 if(path.length > 0) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
308 // path = $var/path/
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
309
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
310 sstr_t var = sstrsubsl(s, 1, path.ptr - s.ptr - 1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
311 if(var.length > 0) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
312 char *env = sstrdup(var).ptr;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
313 char *envval = getenv(env);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
314 free(env);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
315 if(envval) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
316 localpath = util_concat_path(envval, path.ptr);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
317 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
318 fprintf(
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
319 stderr,
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
320 "Environment variable %.*s not set.\nAbort.\n",
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
321 (int)var.length,
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
322 var.ptr);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
323 exit(-1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
324 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
325 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
326 localpath = sstrdup(path).ptr;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
327 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
328 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
329 // path = $var
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
330 char *envval = getenv(cfg + 1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
331 if(envval) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
332 localpath = strdup(envval);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
333 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
334 fprintf(
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
335 stderr,
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
336 "Environment variable %s not set.\nAbort.\n",
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
337 cfg);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
338 exit(-1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
339 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
340 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
341 return localpath;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
342 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
343
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
344
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
345 int add_directory(SyncDirectory *dir) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
346 char *file = util_concat_path(ENV_HOME, ".dav/sync.xml");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
347 xmlDoc *doc = xmlReadFile(file, NULL, 0);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
348 if(!doc) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
349 free(file);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
350 fprintf(stderr, "Cannot load config.xml\n");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
351 return 1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
352 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
353
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
354 xmlNode *root = xmlDocGetRootElement(doc);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
355
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
356 xmlNode *dirNode = xmlNewNode(NULL, BAD_CAST "directory");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
357 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
358
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
359 xmlNewTextChild(dirNode, NULL, BAD_CAST "name", BAD_CAST dir->name);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
360 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
361
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
362 xmlNewTextChild(dirNode, NULL, BAD_CAST "path", BAD_CAST dir->path);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
363 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
364
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
365 xmlNewTextChild(dirNode, NULL, BAD_CAST "repository", BAD_CAST dir->repository);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
366 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
367
203
9a93ebd71984 fixed add-directory command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 202
diff changeset
368 xmlNewTextChild(dirNode, NULL, BAD_CAST "collection", BAD_CAST dir->collection);
9a93ebd71984 fixed add-directory command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 202
diff changeset
369 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
9a93ebd71984 fixed add-directory command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 202
diff changeset
370
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
371 if(dir->trash) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
372 xmlNewTextChild(dirNode, NULL, BAD_CAST "trash", BAD_CAST dir->trash);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
373 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
374 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
375 xmlNewTextChild(dirNode, NULL, BAD_CAST "database", BAD_CAST dir->database);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
376 xmlNodeAddContent(dirNode, BAD_CAST "\n\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
377
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
378 xmlNodeAddContent(root, BAD_CAST "\n\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
379 xmlAddChild(root, dirNode);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
380 xmlNodeAddContent(root, BAD_CAST "\n");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
381
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
382 int ret = 0;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
383 if(xmlSaveFormatFileEnc(file, doc, "UTF-8", 1) == -1) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
384 ret = 1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
385 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
386 xmlFreeDoc(doc);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
387 free(file);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
388
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
389 return ret;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
390 }
198
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
391
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
392 int list_syncdirs() {
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
393 UcxMapIterator i = ucx_map_iterator(directories);
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
394 SyncDirectory *dir;
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
395 UCX_MAP_FOREACH(key, dir, i) {
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
396 printf("%s\n", dir->name);
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
397 }
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
398 return 0;
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
399 }
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
400
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
401 char* generate_db_name(char *basename) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
402 char *dbname = NULL;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
403 int count = -1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
404 while(!dbname) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
405 sstr_t name = count < 0 ?
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
406 ucx_sprintf("%s-db.xml", basename) :
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
407 ucx_sprintf("%s%d-db.xml", basename, count);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
408 count++;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
409
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
410 UcxMapIterator i = ucx_map_iterator(directories);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
411 SyncDirectory *dir;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
412 bool unique = true;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
413 UCX_MAP_FOREACH(key, dir, i) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
414 if(!sstrcmp(name, sstr(dir->database))) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
415 unique = false;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
416 break;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
417 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
418 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
419 if(unique) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
420 dbname = name.ptr;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
421 break;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
422 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
423 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
424 return dbname;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
425 }
224
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
426
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
427
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
428 void free_sync_config() {
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
429 UcxMapIterator i = ucx_map_iterator(directories);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
430 SyncDirectory *dir;
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
431 UCX_MAP_FOREACH(elm, dir, i) {
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
432 free(dir->name);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
433 free(dir->path);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
434 free(dir->repository);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
435 free(dir->database);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
436
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
437 if(dir->collection) {
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
438 free(dir->collection);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
439 }
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
440 if(dir->trash) {
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
441 free(dir->trash);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
442 }
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
443
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
444 UCX_FOREACH(elm, dir->include) {
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
445 regfree(elm->data);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
446 free(elm->data);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
447 }
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
448 ucx_list_free(dir->include);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
449 UCX_FOREACH(elm, dir->exclude) {
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
450 regfree(elm->data);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
451 free(elm->data);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
452 }
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
453 ucx_list_free(dir->exclude);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
454
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
455 free(dir);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
456 }
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
457
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
458 ucx_map_free(directories);
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
459 }

mercurial