Sun, 17 Dec 2023 14:25:34 +0100
[Makefile] fix missing rules preventing dry-runs
We have to support dry-runs, because many IDEs are using
dry-runs to collect build information.
Some rules have dependencies that expect certain files or
directories to be just present. We added respective build
rules which invoke the test program. This way, the behavior
when running make normally is exactly the same, but dry-runs
are also not failing now.
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2018 Olaf Wintermann. All rights reserved. |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
b6f2462ee055
adds xattr lib and tag support
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 |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include <stdio.h> |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include <stdlib.h> |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
31 | #include <string.h> |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
32 | #include <ctype.h> |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
34 | #include <cx/string.h> |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
35 | #include <cx/utils.h> |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
36 | #include <cx/printf.h> |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
37 | #include <cx/hash_map.h> |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
39 | #include <libidav/crypto.h> |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
40 | |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | #include "libxattr.h" |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | #include "tags.h" |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
45 | #ifdef __APPLE__ |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
46 | #include <CoreFoundation/CoreFoundation.h> |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
47 | #endif |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
48 | |
390
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
49 | void free_dav_tag(DavTag* tag) { |
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
50 | free(tag->name); |
403
8e1948eebef5
adds tag filters for push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
400
diff
changeset
|
51 | if(tag->color) { |
8e1948eebef5
adds tag filters for push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
400
diff
changeset
|
52 | free(tag->color); |
8e1948eebef5
adds tag filters for push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
400
diff
changeset
|
53 | } |
390
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
54 | free(tag); |
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
55 | } |
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
56 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
57 | void free_taglist(CxList *list) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
58 | if(!list) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
59 | return; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
60 | } |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
61 | cxListDestroy(list); |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
62 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
63 | |
390
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
64 | int compare_tagname(DavTag* left, DavTag* right, void* ignorecase) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
65 | cxstring leftname = cx_str(left->name); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
66 | cxstring rightname = cx_str(right->name); |
390
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
67 | if (ignorecase && *((int*) ignorecase)) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
68 | return cx_strcasecmp(leftname, rightname); |
390
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
69 | } else { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
70 | return cx_strcmp(leftname, rightname); |
390
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
71 | } |
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
72 | } |
26998dc980f9
adds tag filter evaluation functions
Mike Becker <universe@uap-core.de>
parents:
388
diff
changeset
|
73 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
74 | CxList* parse_text_taglist(const char *buf, size_t length) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
75 | CxList *tags = cxLinkedListCreateSimple(CX_STORE_POINTERS); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
76 | tags->simple_destructor = (cx_destructor_func)free_dav_tag; |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | int line_start = 0; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | for(int i=0;i<length;i++) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | if(buf[i] == '\n' || i == length-1) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
81 | cxstring line = cx_strtrim(cx_strn((char*)buf + line_start, i - line_start)); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | if(line.length > 0) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | DavTag *tag = calloc(1, sizeof(DavTag)); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
84 | cxstring color = cx_strchr(line, '#'); |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
85 | if(color.length>0) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
86 | cxstring name = line; |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
87 | name.length = (int)(color.ptr-line.ptr); |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
88 | if(name.length != 0) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
89 | tag->name = cx_strdup(name).ptr; |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
90 | color.ptr++; |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
91 | color.length--; |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
92 | if(color.length > 0) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
93 | tag->color = cx_strdup(color).ptr; |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
94 | } |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
95 | } else { |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
96 | free(tag); |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
97 | } |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
98 | } else { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
99 | tag->name = cx_strdup(line).ptr; |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
100 | tag->color = NULL; |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
101 | } |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
102 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
103 | cxListAdd(tags, tag); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | line_start = i+1; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | return tags; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
111 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
112 | CxMap* taglist2map(CxList *tags) { |
767
f4acc783f25e
fix tag filter crash
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
747
diff
changeset
|
113 | if(!tags) { |
f4acc783f25e
fix tag filter crash
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
747
diff
changeset
|
114 | return cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); |
f4acc783f25e
fix tag filter crash
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
747
diff
changeset
|
115 | } |
f4acc783f25e
fix tag filter crash
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
747
diff
changeset
|
116 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
117 | CxMap *map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, tags->size + 8); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
118 | CxIterator iter = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
119 | cx_foreach(DavTag*, t, iter) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
120 | cxMapPut(map, cx_hash_key_str(t->name), t); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
121 | } |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
122 | return map; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
123 | } |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
124 | |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
125 | CxBuffer* create_text_taglist(CxList *tags) { |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
126 | if(!tags) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
127 | return NULL; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
128 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
129 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
130 | CxBuffer *buf = cxBufferCreate(NULL, 128, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
131 | CxIterator i = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
132 | cx_foreach(DavTag *, tag, i) { |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
133 | if(tag->color) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
134 | cx_bprintf(buf, "%s#%s\n", tag->name, tag->color); |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
135 | } else { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
136 | cx_bprintf(buf, "%s\n", tag->name); |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
137 | } |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
138 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
139 | return buf; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
140 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
141 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
142 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
143 | CxList* parse_csv_taglist(const char *buf, size_t length) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
144 | CxList *taglist = cxLinkedListCreateSimple(CX_STORE_POINTERS); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
145 | taglist->simple_destructor = (cx_destructor_func)free_dav_tag; |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
147 | cxstring str = cx_strn(buf, length); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
148 | CxStrtokCtx tags = cx_strtok(str, CX_STR(","), INT_MAX); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
149 | cxstring tagstr; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
150 | while(cx_strtok_next(&tags, &tagstr)) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
151 | cxstring trimmed_tag = cx_strtrim(tagstr); |
393
438c8fe7d62f
parse_csv_taglist() now skips empty tags
Mike Becker <universe@uap-core.de>
parents:
390
diff
changeset
|
152 | if (trimmed_tag.length > 0) { |
438c8fe7d62f
parse_csv_taglist() now skips empty tags
Mike Becker <universe@uap-core.de>
parents:
390
diff
changeset
|
153 | DavTag *tag = malloc(sizeof(DavTag)); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
154 | tag->name = cx_strdup(trimmed_tag).ptr; |
393
438c8fe7d62f
parse_csv_taglist() now skips empty tags
Mike Becker <universe@uap-core.de>
parents:
390
diff
changeset
|
155 | tag->color = NULL; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
156 | cxListAdd(taglist, tag); |
393
438c8fe7d62f
parse_csv_taglist() now skips empty tags
Mike Becker <universe@uap-core.de>
parents:
390
diff
changeset
|
157 | } |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
158 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
159 | return taglist; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
160 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
161 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
162 | CxBuffer* create_csv_taglist(CxList *tags) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
163 | CxBuffer *buf = cxBufferCreate(NULL, 128, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
164 | int insertsep = 0; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
165 | CxIterator i = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
166 | cx_foreach(DavTag*, tag, i) { |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | if(insertsep) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
168 | cxBufferPut(buf, ','); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
169 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
170 | cxBufferPutString(buf, tag->name); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | insertsep = 1; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | return buf; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
175 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | static DavTag* parse_xml_dav_tag(DavXmlNode *node) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
178 | char *name = NULL; |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
179 | char *color = NULL; |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | DavXmlNode *c = node->children; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | while(c) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | if(c->type == DAV_XML_ELEMENT) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
184 | char *value = dav_xml_getstring(c->children); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
185 | if(value) { |
667
6cdcd3e4e368
finish basic metadata sync tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
186 | if(!strcmp(c->namespace, DAV_PROPS_NS)) { |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
187 | if(!strcmp(c->name, "name")) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | char *value = dav_xml_getstring(c->children); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | if(value) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | name = value; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | } |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
193 | if(!strcmp(c->name, "color")) { |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
194 | char *value = dav_xml_getstring(c->children); |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
195 | if(value) { |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
196 | color = value; |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
197 | } |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
198 | } |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
200 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
201 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
202 | c = c->next; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
203 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
204 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
205 | DavTag *tag = NULL; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
206 | if(name) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
207 | tag = malloc(sizeof(DavTag)); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
208 | tag->name = strdup(name); |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
209 | tag->color = color ? strdup(color) : NULL; |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
210 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
211 | return tag; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
212 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
213 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
214 | CxList* parse_dav_xml_taglist(DavXmlNode *taglistnode) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
215 | CxList *tags = cxLinkedListCreateSimple(CX_STORE_POINTERS); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
216 | tags->simple_destructor = (cx_destructor_func)free_dav_tag; |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | DavXmlNode *node = taglistnode; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | while(node) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | if(node->type == DAV_XML_ELEMENT) { |
667
6cdcd3e4e368
finish basic metadata sync tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
221 | if(!strcmp(node->namespace, DAV_PROPS_NS) && !strcmp(node->name, "tag")) { |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | DavTag *tag = parse_xml_dav_tag(node); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | if(tag) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
224 | cxListAdd(tags, tag); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | node = node->next; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | return tags; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
234 | DavXmlNode* create_xml_taglist(CxList *tags) { |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | DavXmlNode *tag1 = NULL; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | DavXmlNode *lasttag = NULL; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
237 | CxIterator i = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
238 | cx_foreach(DavTag*, tag, i) { |
667
6cdcd3e4e368
finish basic metadata sync tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
239 | DavXmlNode *tagelm = dav_xml_createnode(DAV_PROPS_NS, "tag"); |
6cdcd3e4e368
finish basic metadata sync tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
240 | DavXmlNode *tagname = dav_xml_createnode_with_text(DAV_PROPS_NS, "name", tag->name); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
241 | tagelm->children = tagname; |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
242 | if(tag->color) { |
667
6cdcd3e4e368
finish basic metadata sync tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
243 | DavXmlNode *tagcolor = dav_xml_createnode_with_text(DAV_PROPS_NS, "color", tag->color); |
423
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
244 | tagname->next = tagcolor; |
84e6c407b431
adds support for tag colors
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
414
diff
changeset
|
245 | } |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
247 | if(lasttag) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
248 | lasttag->next = tagelm; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
249 | tagelm->prev = lasttag; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
250 | } else { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
251 | tag1 = tagelm; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
252 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
253 | lasttag = tagelm; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
254 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
255 | return tag1; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
256 | } |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
257 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
258 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
259 | #ifdef __APPLE__ |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
260 | static DavTag* tagstr2davtag(const char *str) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
261 | const char *name = str; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
262 | const char *color = NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
263 | size_t len = strlen(str); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
264 | size_t namelen = len; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
265 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
266 | if(len == 0) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
267 | return NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
268 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
269 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
270 | // start with 1 because the first char should not be a linebreak |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
271 | for(int i=1;i<len;i++) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
272 | if(str[i] == '\n') { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
273 | if(!color) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
274 | color = str + i + 1; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
275 | namelen = i; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
276 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
277 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
278 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
279 | int colorlen = len - namelen - 1; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
280 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
281 | DavTag *tag = malloc(sizeof(DavTag)); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
282 | tag->name = malloc(namelen + 1); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
283 | memcpy(tag->name, name, namelen); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
284 | tag->name[namelen] = 0; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
285 | if(colorlen > 0) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
286 | tag->color = malloc(colorlen + 1); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
287 | memcpy(tag->color, color, colorlen); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
288 | tag->color[colorlen] = 0; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
289 | } else { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
290 | tag->color = NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
291 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
292 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
293 | return tag; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
294 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
295 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
296 | CxList* parse_macos_taglist(const char *buf, size_t length) { |
785
645f7e802873
fix build on macOS
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
769
diff
changeset
|
297 | CxList *taglist = cxLinkedListCreateSimple(CX_STORE_POINTERS); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
298 | taglist->simple_destructor = (cx_destructor_func)free_dav_tag; |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
299 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
300 | CFDataRef data = CFDataCreateWithBytesNoCopy( |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
301 | kCFAllocatorDefault, |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
302 | (const UInt8*)buf, |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
303 | length, |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
304 | kCFAllocatorNull); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
305 | CFPropertyListRef propertylist = CFPropertyListCreateWithData(kCFAllocatorDefault, data, 0, NULL, NULL); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
306 | CFArrayRef array = propertylist; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
307 | int count = CFArrayGetCount(array); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
308 | for(int i=0;i<count;i++) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
309 | CFStringRef str = CFArrayGetValueAtIndex(array, i); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
310 | int slen = CFStringGetLength(str); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
311 | size_t cstrbuflen = slen * 4 + 4; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
312 | char *cstr = malloc(cstrbuflen); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
313 | if(CFStringGetCString(str, cstr, cstrbuflen, kCFStringEncodingUTF8)) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
314 | DavTag *tag = tagstr2davtag(cstr); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
315 | if(tag) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
316 | cxListAdd(taglist, tag); |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
317 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
318 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
319 | free(cstr); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
320 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
321 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
322 | CFRelease(propertylist); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
323 | CFRelease(data); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
324 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
325 | return taglist; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
326 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
327 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
328 | CxBuffer* create_macos_taglist(CxList *tags) { |
785
645f7e802873
fix build on macOS
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
769
diff
changeset
|
329 | size_t count = tags->size; |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
330 | if(count == 0) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
331 | return NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
332 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
333 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
334 | CFStringRef *strings = calloc(sizeof(CFStringRef), count); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
335 | int i = 0; |
785
645f7e802873
fix build on macOS
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
769
diff
changeset
|
336 | CxIterator iter = cxListIterator(tags); |
645f7e802873
fix build on macOS
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
769
diff
changeset
|
337 | cx_foreach(DavTag*, tag, iter) { |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
338 | CFStringRef str = NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
339 | if(tag->color) { |
785
645f7e802873
fix build on macOS
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
769
diff
changeset
|
340 | cxmutstr s = cx_strcat(3, cx_mutstr(tag->name), CX_STR("\n"), cx_str(tag->color)); |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
341 | str = CFStringCreateWithCString(kCFAllocatorDefault, s.ptr, kCFStringEncodingUTF8); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
342 | free(s.ptr); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
343 | } else { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
344 | str = CFStringCreateWithCString(kCFAllocatorDefault, tag->name, kCFStringEncodingUTF8); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
345 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
346 | strings[i] = str; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
347 | i++; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
348 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
349 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
350 | CFPropertyListRef array = CFArrayCreate(kCFAllocatorDefault, (const void**)strings, count, &kCFTypeArrayCallBacks); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
351 | CFDataRef data = CFPropertyListCreateData(kCFAllocatorDefault, array, kCFPropertyListBinaryFormat_v1_0, 0, NULL); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
352 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
353 | CxBuffer *buf = NULL; |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
354 | if(data) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
355 | int datalen = CFDataGetLength(data); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
356 | CFRange range; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
357 | range.location = 0; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
358 | range.length = datalen; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
359 | buf = cxBufferCreate(NULL, datalen, cxDefaultAllocator, 0); |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
360 | CFDataGetBytes(data, range, (UInt8*)buf->space); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
361 | buf->size = datalen; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
362 | CFRelease(data); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
363 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
364 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
365 | for(int i=0;i<count;i++) { |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
366 | CFRelease(strings[i]); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
367 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
368 | CFRelease(array); |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
369 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
370 | return buf; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
371 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
372 | |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
373 | #else |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
374 | CxList* parse_macos_taglist(const char *buf, size_t length) { |
373
dcc03142eb5f
dav info prints simplified xml values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
363
diff
changeset
|
375 | fprintf(stderr, "Error: macos tags not supported on this platform.\n"); |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
376 | return NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
377 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
378 | CxBuffer* create_macos_taglist(CxList *tags) { |
373
dcc03142eb5f
dav info prints simplified xml values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
363
diff
changeset
|
379 | fprintf(stderr, "Error: macos tags not supported on this platform.\n"); |
363
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
380 | return NULL; |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
381 | } |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
382 | #endif |
e9ed8e130ccf
adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
383 | |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
384 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
385 | int compare_taglists(CxList *tags1, CxList *tags2) { |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
386 | if(!tags1) { |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
387 | return tags2 ? 0 : 1; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
388 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
389 | if(!tags2) { |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
390 | return tags1 ? 0 : 1; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
391 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
392 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
393 | CxMap *map1 = taglist2map(tags1); |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
394 | |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
395 | int equal = 1; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
396 | int i = 0; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
397 | CxIterator iter = cxListIterator(tags2); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
398 | cx_foreach(DavTag*, t, iter) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
399 | if(!cxMapGet(map1, cx_hash_key_str(t->name))) { |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
400 | equal = 0; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
401 | break; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
402 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
403 | i++; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
404 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
405 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
406 | if(i != map1->size) { |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
407 | equal = 0; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
408 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
409 | cxMapDestroy(map1); |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
410 | return equal; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
411 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
510
diff
changeset
|
412 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
413 | char* create_tags_hash(CxList *tags) { |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
414 | if(!tags) { |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
415 | return NULL; |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
416 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
417 | CxBuffer *buf = create_text_taglist(tags); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
418 | char *hash = dav_create_hash(buf->space, buf->size); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
419 | cxBufferDestroy(buf); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
420 | return hash; |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
421 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
422 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
423 | CxList* merge_tags(CxList *tags1, CxList *tags2) { |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
424 | // this map is used to check the existence of tags |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
425 | CxMap *tag_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 32); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
426 | // merged taglist |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
427 | CxList *new_tags = cxLinkedListCreateSimple(CX_STORE_POINTERS); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
428 | new_tags->simple_destructor = (cx_destructor_func)free_dav_tag; |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
429 | |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
430 | // add all local tags |
769
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
431 | if(tags1) { |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
432 | CxIterator iter = cxListIterator(tags1); |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
433 | cx_foreach(DavTag*, t, iter) { |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
434 | cxMapPut(tag_map, cx_hash_key_str(t->name), t); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
435 | DavTag *newt = calloc(1, sizeof(DavTag)); |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
436 | newt->color = t->color ? strdup(t->color) : NULL; |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
437 | newt->name = strdup(t->name); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
438 | cxListAdd(new_tags, newt); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
439 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
440 | } |
769
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
441 | |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
442 | // check if a remote tag is already in the map |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
443 | // and if not add it to the new taglist |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
444 | if(tags2) { |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
445 | CxIterator iter = cxListIterator(tags2); |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
446 | cx_foreach(DavTag*, t, iter) { |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
447 | if(!cxMapGet(tag_map, cx_hash_key_str(t->name))) { |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
448 | DavTag *newt = calloc(1, sizeof(DavTag)); |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
449 | newt->color = t->color ? strdup(t->color) : NULL; |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
450 | newt->name = strdup(t->name); |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
451 | cxListAdd(new_tags, newt); |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
452 | } |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
453 | } |
24b317ce5ca9
fix crash in merge_tags() when one list was NULL
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
768
diff
changeset
|
454 | } |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
455 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
456 | cxMapDestroy(tag_map); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
457 | |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
458 | return new_tags; |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
459 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
460 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
461 | void add_tag_colors(CxList *taglist, CxList *colored) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
462 | CxMap *tagmap = taglist2map(taglist); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
463 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
464 | CxIterator i = cxListIterator(colored); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
465 | cx_foreach(DavTag*, colored_tag, i) { |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
466 | if(colored_tag->color) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
467 | DavTag *tag = cxMapGet(tagmap, cx_hash_key_str(colored_tag->name)); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
468 | if(tag && !tag->color) { |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
469 | tag->color = strdup(colored_tag->color); |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
470 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
471 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
472 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
473 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
474 | cxMapDestroy(tagmap); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
475 | } |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
524
diff
changeset
|
476 | |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
477 | /* ----------- ----------- tag filter ---------------------- */ |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
478 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
479 | static size_t rtrimskip(cxstring str, size_t skip) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
480 | while (skip < str.length && isspace(str.ptr[skip])) skip++; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
481 | return skip; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
482 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
483 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
484 | static size_t parse_tagfilter_taglist(cxstring fs, SyncTagFilter* tagfilter) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
485 | size_t csvlen; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
486 | for (csvlen = 0 ; csvlen < fs.length ; ++csvlen) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
487 | if (fs.ptr[csvlen] == ')') break; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
488 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
489 | fs.length = csvlen; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
490 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
491 | tagfilter->tags = parse_csv_taglist(fs.ptr, fs.length); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
492 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
493 | return csvlen; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
494 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
495 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
496 | static size_t parse_tagfilter_subfilters(cxstring fs, SyncTagFilter* tagfilter); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
497 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
498 | static size_t parse_tagfilter_filter(cxstring fs, SyncTagFilter* tagfilter) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
499 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
500 | size_t consumed = rtrimskip(fs, 0); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
501 | fs = cx_strsubs(fs, consumed); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
502 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
503 | if (fs.length == 0) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
504 | return consumed; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
505 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
506 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
507 | // optional operator |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
508 | int hasop = 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
509 | if (fs.ptr[0] == '&') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
510 | tagfilter->mode = DAV_SYNC_TAGFILTER_AND; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
511 | hasop = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
512 | } else if (fs.ptr[0] == '|') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
513 | tagfilter->mode = DAV_SYNC_TAGFILTER_OR; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
514 | hasop = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
515 | } else if (fs.ptr[0] == '0') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
516 | tagfilter->mode = DAV_SYNC_TAGFILTER_NONE; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
517 | hasop = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
518 | } else if (fs.ptr[0] == '1') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
519 | tagfilter->mode = DAV_SYNC_TAGFILTER_ONE; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
520 | hasop = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
521 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
522 | // default operator is AND |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
523 | tagfilter->mode = DAV_SYNC_TAGFILTER_AND; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
524 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
525 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
526 | if (hasop) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
527 | size_t skip = rtrimskip(fs, 1); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
528 | consumed += skip; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
529 | fs = cx_strsubs(fs, skip); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
530 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
531 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
532 | if (fs.length > 0 && fs.ptr[0] == '(') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
533 | size_t c = parse_tagfilter_subfilters(fs, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
534 | if (c) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
535 | return consumed + c; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
536 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
537 | return 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
538 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
539 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
540 | tagfilter->subfilter_count = 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
541 | tagfilter->subfilters = NULL; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
542 | return consumed + parse_tagfilter_taglist(fs, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
543 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
544 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
545 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
546 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
547 | /* |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
548 | * Parses: ( "(" , filter , ")" )+ |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
549 | */ |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
550 | static size_t parse_tagfilter_subfilters(cxstring fs, SyncTagFilter* f) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
551 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
552 | // strategy: allocate much and give back later (instead of reallocs in loop) |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
553 | size_t subfilter_cap = 8; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
554 | f->subfilters = calloc(subfilter_cap, sizeof(SyncTagFilter*)); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
555 | f->subfilter_count = 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
556 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
557 | size_t total_consumed = 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
558 | size_t c; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
559 | do { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
560 | // skip leading parenthesis (and white spaces) |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
561 | c = rtrimskip(fs, 1); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
562 | fs = cx_strsubs(fs, c); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
563 | total_consumed += c; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
564 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
565 | // increase array capacity, if necessary |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
566 | if (f->subfilter_count >= subfilter_cap) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
567 | subfilter_cap *= 2; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
568 | SyncTagFilter** newarr = realloc(f->subfilters, |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
569 | subfilter_cap * sizeof(SyncTagFilter*)); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
570 | if (newarr) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
571 | f->subfilters = newarr; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
572 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
573 | abort(); // no error handling reachable, so we are fucked |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
574 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
575 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
576 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
577 | // allocate space for a new filter |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
578 | SyncTagFilter* subf = calloc(1, sizeof(SyncTagFilter)); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
579 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
580 | // parse that filter |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
581 | c = parse_tagfilter_filter(fs, subf); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
582 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
583 | // sanity check: we must end with a closing parenthesis |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
584 | if (c > 0 && fs.ptr[c] == ')') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
585 | f->subfilters[f->subfilter_count++] = subf; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
586 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
587 | // consume ')' and find the next parenthesis or the end-of-string |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
588 | c = rtrimskip(fs, 1+c); |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
589 | fs = cx_strsubs(fs, c); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
590 | total_consumed += c; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
591 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
592 | if (fs.length == 0 || fs.ptr[0] == ')') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
593 | // our job is done |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
594 | break; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
595 | } else if (fs.ptr[0] != '(') { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
596 | // anything else than a parenthesis or end-of-string is an error |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
597 | return 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
598 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
599 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
600 | free(subf); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
601 | break; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
602 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
603 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
604 | } while(1); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
605 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
606 | // try to shrink the array |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
607 | if (f->subfilter_count > 0) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
608 | SyncTagFilter** shrinked_array = realloc(f->subfilters, |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
609 | f->subfilter_count * sizeof(SyncTagFilter*)); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
610 | if (shrinked_array) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
611 | f->subfilters = shrinked_array; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
612 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
613 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
614 | free(f->subfilters); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
615 | f->subfilters = NULL; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
616 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
617 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
618 | return total_consumed; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
619 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
620 | |
414
ea50585ec9d9
adds tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
403
diff
changeset
|
621 | SyncTagFilter* parse_tagfilter_string(const char* filterstring, int scope) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
622 | SyncTagFilter* tagfilter = calloc(1, sizeof(SyncTagFilter)); |
414
ea50585ec9d9
adds tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
403
diff
changeset
|
623 | tagfilter->scope = scope; |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
624 | if (!filterstring) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
625 | return tagfilter; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
626 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
627 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
628 | cxstring fs = cx_str(filterstring); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
629 | size_t consumed = parse_tagfilter_filter(fs, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
630 | if (!consumed) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
631 | free_tagfilter(tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
632 | return NULL; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
633 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
634 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
635 | // consume trailing white spaces |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
636 | consumed = rtrimskip(fs, consumed); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
637 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
638 | // sanity check: have we consumed the whole string? |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
639 | if (consumed != fs.length) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
640 | free_tagfilter(tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
641 | return NULL; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
642 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
643 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
644 | return tagfilter; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
645 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
646 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
647 | void free_tagfilter(SyncTagFilter* filter) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
648 | for (size_t i = 0 ; i < filter->subfilter_count ; i++) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
649 | free_tagfilter(filter->subfilters[i]); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
650 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
651 | free(filter->subfilters); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
652 | free(filter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
653 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
654 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
655 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
656 | static int matches_tags_and(CxList *dav_tags, CxList *tags, int ignorecase) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
657 | // ignorecase not supported yet |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
658 | int ret = 1; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
659 | CxMap *tagmap = taglist2map(dav_tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
660 | CxIterator i = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
661 | cx_foreach(DavTag *, tag, i) { |
768
eb495f3d4065
fix matches_tags_and
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
767
diff
changeset
|
662 | if (cxMapGet(tagmap, cx_hash_key_str(tag->name)) == NULL) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
663 | ret = 0; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
664 | break; |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
665 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
666 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
667 | cxMapDestroy(tagmap); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
668 | return ret; |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
669 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
670 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
671 | static int matches_tags_or(CxList *dav_tags, CxList *tags, int ignorecase) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
672 | // ignorecase not supported yet |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
673 | int ret = 0; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
674 | CxMap *tagmap = taglist2map(dav_tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
675 | CxIterator i = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
676 | cx_foreach(DavTag *, tag, i) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
677 | if (cxMapGet(tagmap, cx_hash_key_str(tag->name))) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
678 | ret = 1; |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
679 | break; |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
680 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
681 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
682 | cxMapDestroy(tagmap); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
683 | return ret; |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
684 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
685 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
686 | static int matches_tags_one(CxList *dav_tags, CxList *tags, int ignorecase) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
687 | int matches_exactly_one = 0; |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
688 | CxMap *tagmap = taglist2map(dav_tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
689 | CxIterator i = cxListIterator(tags); |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
690 | cx_foreach(DavTag *, tag, i) { |
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
691 | if (cxMapGet(tagmap, cx_hash_key_str(tag->name))) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
692 | if (matches_exactly_one) { |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
693 | cxMapDestroy(tagmap); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
694 | return 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
695 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
696 | matches_exactly_one = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
697 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
698 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
699 | } |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
700 | cxMapDestroy(tagmap); |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
701 | return matches_exactly_one; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
702 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
703 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
704 | static int matches_subfilters_and(CxList *dav_tags, SyncTagFilter *filter) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
705 | int ret = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
706 | for (size_t i = 0 ; i < filter->subfilter_count ; i++) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
707 | ret &= matches_tagfilter(dav_tags, filter->subfilters[i]); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
708 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
709 | return ret; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
710 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
711 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
712 | static int matches_subfilters_or(CxList *dav_tags, SyncTagFilter *filter) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
713 | int ret = 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
714 | for (size_t i = 0 ; i < filter->subfilter_count ; i++) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
715 | ret |= matches_tagfilter(dav_tags, filter->subfilters[i]); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
716 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
717 | return ret; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
718 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
719 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
720 | static int matches_subfilters_one(CxList *dav_tags, SyncTagFilter *filter) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
721 | int one = 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
722 | for (size_t i = 0 ; i < filter->subfilter_count ; i++) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
723 | if (matches_tagfilter(dav_tags, filter->subfilters[i])) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
724 | if (one) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
725 | return 0; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
726 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
727 | one = 1; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
728 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
729 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
730 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
731 | return one; |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
732 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
733 | |
747
efbd59642577
ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
667
diff
changeset
|
734 | int matches_tagfilter(CxList *dav_tags, SyncTagFilter *tagfilter) { |
400
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
735 | |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
736 | if (tagfilter->subfilter_count > 0) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
737 | switch (tagfilter->mode) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
738 | case DAV_SYNC_TAGFILTER_OR: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
739 | return matches_subfilters_or(dav_tags, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
740 | case DAV_SYNC_TAGFILTER_AND: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
741 | return matches_subfilters_and(dav_tags, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
742 | case DAV_SYNC_TAGFILTER_NONE: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
743 | return !matches_subfilters_or(dav_tags, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
744 | case DAV_SYNC_TAGFILTER_ONE: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
745 | return matches_subfilters_one(dav_tags, tagfilter); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
746 | default: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
747 | abort(); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
748 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
749 | } else { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
750 | int ignorecase = 0; // TODO: maybe add support later |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
751 | switch (tagfilter->mode) { |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
752 | case DAV_SYNC_TAGFILTER_OR: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
753 | return matches_tags_or(dav_tags, tagfilter->tags, ignorecase); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
754 | case DAV_SYNC_TAGFILTER_AND: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
755 | return matches_tags_and(dav_tags, tagfilter->tags, ignorecase); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
756 | case DAV_SYNC_TAGFILTER_NONE: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
757 | return !matches_tags_or(dav_tags, tagfilter->tags, ignorecase); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
758 | case DAV_SYNC_TAGFILTER_ONE: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
759 | return matches_tags_one(dav_tags, tagfilter->tags, ignorecase); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
760 | default: |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
761 | abort(); |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
762 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
763 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
764 | } |
90c6bfa94fa2
moves tag filter to tags.c
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
393
diff
changeset
|
765 |