libidav/resource.c

changeset 84
7fca3788261d
parent 75
56962faf2b42
child 100
f4127c4d1018
equal deleted inserted replaced
83:7d20ce5d235b 84:7fca3788261d
243 UcxKey dav_property_key(char *ns, char *name) { 243 UcxKey dav_property_key(char *ns, char *name) {
244 sstr_t ns_str = sstr(ns); 244 sstr_t ns_str = sstr(ns);
245 sstr_t name_str = sstr(name); 245 sstr_t name_str = sstr(name);
246 246
247 sstr_t key; 247 sstr_t key;
248 key = sstrcat(3, ns_str, S(" "), name_str); 248 key = sstrcat(4, ns_str, S("\0"), name_str, S("\0"));
249 249
250 return ucx_key(key.ptr, key.length); 250 return ucx_key(key.ptr, key.length);
251 } 251 }
252 252
253 253
352 namespace->prefix = NULL; 352 namespace->prefix = NULL;
353 namespace->name = sstrdup_a(a, sstr(ns)).ptr; 353 namespace->name = sstrdup_a(a, sstr(ns)).ptr;
354 property->ns = namespace; 354 property->ns = namespace;
355 355
356 data->remove = ucx_list_append_a(a, data->remove, property); 356 data->remove = ucx_list_append_a(a, data->remove, property);
357 }
358
359 static int compare_propname(const void *a, const void *b) {
360 const DavPropName *p1 = a;
361 const DavPropName *p2 = b;
362
363 int result = strcmp(p1->ns, p2->ns);
364 if(result) {
365 return result;
366 } else {
367 return strcmp(p1->name, p2->name);
368 }
369 }
370
371 DavPropName* dav_get_property_names(DavResource *res, size_t *count) {
372 DavResourceData *data = res->data;
373
374 *count = data->properties->count;
375 DavPropName *names = dav_session_calloc(
376 res->session,
377 *count,
378 sizeof(DavPropName));
379
380
381 UcxMapIterator i = ucx_map_iterator(data->properties);
382 void *value;
383 int j = 0;
384 UCX_MAP_FOREACH(key, value, i) {
385 DavPropName *name = &names[j];
386 // the map key is namespace + '\0' + name
387 name->ns = key.data;
388 for(int k=0;j<key.len;k++) {
389 if(((char*)key.data)[k] == '\0') {
390 name->name = key.data + k + 1;
391 break;
392 }
393 }
394 j++;
395 }
396
397 qsort(names, *count, sizeof(DavPropName), compare_propname);
398
399 return names;
357 } 400 }
358 401
359 402
360 void dav_set_content(DavResource *res, void *stream, dav_read_func read_func) { 403 void dav_set_content(DavResource *res, void *stream, dav_read_func read_func) {
361 DavResourceData *data = res->data; 404 DavResourceData *data = res->data;

mercurial