libidav/xml.c

changeset 532
aeda47714978
parent 526
e3c0440bd599
child 588
0cfe006fcad2
equal deleted inserted replaced
531:fa54e3a1250a 532:aeda47714978
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;

mercurial