136 size_t count = 0; |
136 size_t count = 0; |
137 |
137 |
138 char *hash = NULL; |
138 char *hash = NULL; |
139 |
139 |
140 DavXmlNode *node = xml; |
140 DavXmlNode *node = xml; |
141 while(node) { |
141 for(;node;node=node->next) { |
142 if(node->type == DAV_XML_ELEMENT) { |
142 if(node->type == DAV_XML_ELEMENT) { |
143 if(!strcmp(node->name, "hash")) { |
143 if(!strcmp(node->name, "hash")) { |
144 hash = dav_xml_getstring(node->children); |
144 hash = dav_xml_getstring(node->children); |
145 } else if(!strcmp(node->name, "xattr")) { |
145 } else if(!strcmp(node->name, "xattr")) { |
146 char *xattr_name = dav_xml_get_attr(node, "name"); |
146 char *xattr_name = dav_xml_get_attr(node, "name"); |
147 if(xattr_name) { |
147 if(xattr_name) { |
148 names = ucx_list_append(names, strdup(xattr_name)); |
148 names = ucx_list_append(names, strdup(xattr_name)); |
149 |
149 |
150 char *text = dav_xml_getstring(node->children); |
150 char *text = dav_xml_getstring(node->children); |
151 if(!text) { |
151 if(!text) { |
152 text = ""; |
152 text = ""; |
204 |
206 |
205 DAV_SHA_CTX *sha256 = dav_hash_init(); |
207 DAV_SHA_CTX *sha256 = dav_hash_init(); |
206 |
208 |
207 size_t nattr = 0; |
209 size_t nattr = 0; |
208 for(int i=0;i<nelm;i++) { |
210 for(int i=0;i<nelm;i++) { |
|
211 if(filter) { |
|
212 // apply filter |
|
213 if(!filter(attributes[i], filterdata)) { |
|
214 // exclude attribute |
|
215 continue; |
|
216 } |
|
217 } |
|
218 |
209 ssize_t valuelen = 0; |
219 ssize_t valuelen = 0; |
210 char *value = xattr_get(path, attributes[i], &valuelen); |
220 char *value = xattr_get(path, attributes[i], &valuelen); |
211 if(valuelen >= 0) { |
221 if(valuelen >= 0) { |
212 dav_hash_update(sha256, attributes[i], strlen(attributes[i])); |
222 dav_hash_update(sha256, attributes[i], strlen(attributes[i])); |
213 dav_hash_update(sha256, value, valuelen); |
223 dav_hash_update(sha256, value, valuelen); |