diff options
Diffstat (limited to 'database/sqlite/sqlite.c')
| -rw-r--r-- | database/sqlite/sqlite.c | 25 |
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 |
