249 newxn->contentlength = content.length; |
249 newxn->contentlength = content.length; |
250 return newxn; |
250 return newxn; |
251 } |
251 } |
252 |
252 |
253 |
253 |
254 |
254 DavXmlAttr* dav_copy_xml_attr(DavXmlAttr *attr) { |
|
255 if(!attr) { |
|
256 return NULL; |
|
257 } |
|
258 DavXmlAttr *newattr = NULL; |
|
259 DavXmlAttr *prev = NULL; |
|
260 while(attr) { |
|
261 DavXmlAttr *n = calloc(1, sizeof(DavXmlAttr)); |
|
262 n->name = strdup(attr->name); |
|
263 n->value = strdup(attr->value); |
|
264 if(prev) { |
|
265 prev->next = n; |
|
266 } else { |
|
267 newattr = n; |
|
268 } |
|
269 prev = n; |
|
270 attr = attr->next; |
|
271 } |
|
272 return newattr; |
|
273 } |
255 |
274 |
256 DavXmlNode* dav_copy_node(DavXmlNode *node) { |
275 DavXmlNode* dav_copy_node(DavXmlNode *node) { |
257 DavXmlNode *ret = NULL; |
276 DavXmlNode *ret = NULL; |
258 DavXmlNode *prev = NULL; |
277 DavXmlNode *prev = NULL; |
259 while(node) { |
278 while(node) { |
261 copy->type = node->type; |
280 copy->type = node->type; |
262 if(node->type == DAV_XML_ELEMENT) { |
281 if(node->type == DAV_XML_ELEMENT) { |
263 copy->namespace = strdup(node->namespace); |
282 copy->namespace = strdup(node->namespace); |
264 copy->name = strdup(node->name); |
283 copy->name = strdup(node->name); |
265 copy->children = dav_copy_node(node->children); |
284 copy->children = dav_copy_node(node->children); |
|
285 copy->attributes = dav_copy_xml_attr(node->attributes); |
266 } else { |
286 } else { |
267 copy->contentlength = node->contentlength; |
287 copy->contentlength = node->contentlength; |
268 copy->content = malloc(node->contentlength+1); |
288 copy->content = malloc(node->contentlength+1); |
269 memcpy(copy->content, node->content, node->contentlength); |
289 memcpy(copy->content, node->content, node->contentlength); |
270 copy->content[copy->contentlength] = 0; |
290 copy->content[copy->contentlength] = 0; |