36 |
36 |
37 #include "requestparser.h" |
37 #include "requestparser.h" |
38 |
38 |
39 #define xstreq(a, b) !strcmp((const char*)a, (const char*)b) |
39 #define xstreq(a, b) !strcmp((const char*)a, (const char*)b) |
40 |
40 |
41 // TODO: make function public |
|
42 int proplist_add( |
|
43 pool_handle_t *pool, |
|
44 WebdavPList **begin, |
|
45 WebdavPList **end, |
|
46 WebdavProperty *prop) |
|
47 { |
|
48 WebdavPList *elm = pool_malloc(pool, sizeof(WebdavPList)); |
|
49 if(!elm) { |
|
50 return 1; |
|
51 } |
|
52 elm->prev = *end; |
|
53 elm->next = NULL; |
|
54 elm->property = prop; |
|
55 |
|
56 if(!*begin) { |
|
57 *begin = elm; |
|
58 *end = elm; |
|
59 return 0; |
|
60 } |
|
61 |
|
62 (*end)->next = elm; |
|
63 *end = elm; |
|
64 |
|
65 return 0; |
|
66 } |
|
67 |
|
68 void proplist_free(pool_handle_t *pool, WebdavPList *list) { |
41 void proplist_free(pool_handle_t *pool, WebdavPList *list) { |
69 while(list) { |
42 while(list) { |
70 WebdavPList *next = list->next; |
43 WebdavPList *next = list->next; |
71 pool_free(pool, list); |
44 pool_free(pool, list); |
72 list = next; |
45 list = next; |
132 if(proppatch) { |
105 if(proppatch) { |
133 prop->value.node = pnode->children; |
106 prop->value.node = pnode->children; |
134 prop->vtype = WS_VALUE_XML_NODE; |
107 prop->vtype = WS_VALUE_XML_NODE; |
135 } |
108 } |
136 if(prop) { |
109 if(prop) { |
137 if(proplist_add(sn->pool, plist_begin, plist_end, prop)) { |
110 if(webdav_plist_add(sn->pool, plist_begin, plist_end, prop)) { |
138 *error = proppatch ? |
111 *error = proppatch ? |
139 PROPPATCH_PARSER_OOM : PROPFIND_PARSER_OOM; |
112 PROPPATCH_PARSER_OOM : PROPFIND_PARSER_OOM; |
140 } |
113 } |
141 (*propcount)++; |
114 (*propcount)++; |
142 } else { |
115 } else { |