summaryrefslogtreecommitdiffstats
path: root/database/sqlite/sqlite.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/sqlite/sqlite.c')
-rw-r--r--database/sqlite/sqlite.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/database/sqlite/sqlite.c b/database/sqlite/sqlite.c
index fce70ad..be86642 100644
--- a/database/sqlite/sqlite.c
+++ b/database/sqlite/sqlite.c
@@ -495,16 +495,31 @@ char *sqlite_get_value(dbresult *res, int row, int col) {
#ifdef HAVE_LIBXML2
-xmlNodePtr sqlite_xml_value(xmlNodePtr node, xmlFieldType xmltyp, char *name, dbresult *res, int row, int col) {
+xmlNodePtr sqlite_xml_value(xmlNodePtr node, xmlFieldType xmltyp, char *inname, dbresult *res, int row, int col) {
+ xmlChar *name = NULL, *data = NULL;
+ xmlNodePtr retnode = NULL;
+
+ name = xmlCharStrdup(inname);
+ assert( name != NULL );
+
+ data = xmlCharStrdup(sqlite_get_value(res, row, col));
+
switch( xmltyp ) {
case XML_ATTR:
- xmlNewProp(node, (xmlChar *)name, (xmlChar *) sqlite_get_value(res, row, col));
- return node;
+ xmlNewProp(node, name, data);
+ retnode = node;
+ break;
case XML_NODE:
- return xmlNewChild(node, NULL, (xmlChar *) name, (xmlChar *)sqlite_get_value(res, row, col));
+ retnode = xmlNewChild(node, NULL, name, data);
+ break;
+
+ default:
+ retnode = NULL;
}
- return NULL;
+ free_nullsafe(data);
+ free_nullsafe(name);
+ return retnode;
}
#endif