summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Laniel <dlaniel@entrouvert.com>2007-10-11 07:28:31 +0000
committerDamien Laniel <dlaniel@entrouvert.com>2007-10-11 07:28:31 +0000
commit007c08916217b5b706598e1060fe5c8e8454aefe (patch)
tree8adcf33a29a7cf7d8090f0453a9594ee26e89366
parent0a611ce8af9b9a05f2821ab8f56ee4731bbd1572 (diff)
fixed modifyng root node
-rw-r--r--lasso/id-wsf/data_service.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/lasso/id-wsf/data_service.c b/lasso/id-wsf/data_service.c
index ae4de06f..1bcbc401 100644
--- a/lasso/id-wsf/data_service.c
+++ b/lasso/id-wsf/data_service.c
@@ -726,7 +726,14 @@ lasso_data_service_build_modify_response_msg(LassoDataService *service)
if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr) {
xmlNode *node = xpathObj->nodesetval->nodeTab[0];
if (node != NULL) {
- xmlReplaceNode(node, newNode);
+ /* If we must replace the root element, change it in the xmlDoc */
+ if (node == cur_data) {
+ xmlDocSetRootElement(doc, newNode);
+ xmlFreeNode(cur_data);
+ cur_data = NULL;
+ } else {
+ xmlReplaceNode(node, newNode);
+ }
}
} else {
res = LASSO_DST_ERROR_MODIFY_FAILED;
@@ -735,10 +742,10 @@ lasso_data_service_build_modify_response_msg(LassoDataService *service)
xpathObj = NULL;
}
- if (res == 0) {
+ if (res == 0 && doc->children != NULL) {
/* Save new service resource data */
xmlFreeNode(service->resource_data);
- service->resource_data = xmlCopyNode(cur_data, 1);
+ service->resource_data = xmlCopyNode(doc->children, 1);
}
xmlXPathFreeContext(xpathCtx);