summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpiano/xml.c59
1 files changed, 28 insertions, 31 deletions
diff --git a/libpiano/xml.c b/libpiano/xml.c
index a113a12..048f792 100644
--- a/libpiano/xml.c
+++ b/libpiano/xml.c
@@ -79,6 +79,19 @@ void PianoXmlStructParser (xmlNode *structRoot,
}
}
+PianoReturn_t PianoXmlInitDoc (char *xml, xmlDocPtr *doc, xmlNode **docRoot) {
+ *doc = xmlReadDoc ((xmlChar *) xml, NULL, NULL, 0);
+
+ if (*doc == NULL) {
+ printf ("libpandora: error while parsing this xml document\n%s\n", xml);
+ return PIANO_RET_ERR;
+ }
+
+ *docRoot = xmlDocGetRootElement (*doc);
+
+ return PIANO_RET_OK;
+}
+
/* get text from <value> nodes; some of them have <boolean>, <string>
* or <int> subnodes, just ignore them
* @author PromyLOPh
@@ -178,16 +191,13 @@ void PianoXmlParsePlaylistCb (char *key, xmlNode *value, void *data) {
* @return nothing
*/
void PianoXmlParseUserinfo (PianoHandle_t *ph, char *xml) {
- xmlNode *docRoot = NULL;
- xmlDocPtr doc = xmlReadDoc ((xmlChar *) xml, NULL, NULL, 0);
+ xmlNode *docRoot;
+ xmlDocPtr doc;
- if (doc == NULL) {
- printf ("whoops... xml parser error\n");
+ if (PianoXmlInitDoc (xml, &doc, &docRoot) != PIANO_RET_OK) {
return;
}
- docRoot = xmlDocGetRootElement (doc);
-
/* <methodResponse> <params> <param> <value> <struct> */
xmlNode *structRoot = docRoot->children->children->children->children;
PianoXmlStructParser (structRoot, PianoXmlParseUserinfoCb, &ph->user);
@@ -205,16 +215,13 @@ void PianoXmlParseUserinfo (PianoHandle_t *ph, char *xml) {
*/
void PianoXmlParseStations (PianoHandle_t *ph, char *xml) {
/* FIXME: copy & waste */
- xmlNode *docRoot = NULL, *curNode = NULL;
- xmlDocPtr doc = xmlReadDoc ((xmlChar *) xml, NULL, NULL, 0);
+ xmlNode *docRoot, *curNode;
+ xmlDocPtr doc;
- if (doc == NULL) {
- printf ("whoops... xml parser error\n");
+ if (PianoXmlInitDoc (xml, &doc, &docRoot) != PIANO_RET_OK) {
return;
}
- docRoot = xmlDocGetRootElement (doc);
-
/* <methodResponse> <params> <param> <value> <array> <data> */
xmlNode *dataRoot = docRoot->children->children->children->children->children;
for (curNode = dataRoot->children; curNode; curNode = curNode->next) {
@@ -248,16 +255,13 @@ void PianoXmlParseStations (PianoHandle_t *ph, char *xml) {
*/
void PianoXmlParsePlaylist (PianoHandle_t *ph, char *xml) {
/* FIXME: copy & waste */
- xmlNode *docRoot = NULL, *curNode = NULL;
- xmlDocPtr doc = xmlReadDoc ((xmlChar *) xml, NULL, NULL, 0);
+ xmlNode *docRoot, *curNode;
+ xmlDocPtr doc;
- if (doc == NULL) {
- printf ("whoops... xml parser error\n");
+ if (PianoXmlInitDoc (xml, &doc, &docRoot) != PIANO_RET_OK) {
return;
}
- docRoot = xmlDocGetRootElement (doc);
-
/* <methodResponse> <params> <param> <value> <array> <data> */
xmlNode *dataRoot = docRoot->children->children->children->children->children;
for (curNode = dataRoot->children; curNode; curNode = curNode->next) {
@@ -292,17 +296,14 @@ void PianoXmlParsePlaylist (PianoHandle_t *ph, char *xml) {
* @return
*/
PianoReturn_t PianoXmlParseSimple (char *xml) {
- xmlNode *docRoot = NULL, *curNode = NULL;
- xmlDocPtr doc = xmlReadDoc ((xmlChar *) xml, NULL, NULL, 0);
+ xmlNode *docRoot;
+ xmlDocPtr doc;
PianoReturn_t ret = PIANO_RET_ERR;
- if (doc == NULL) {
- printf ("whoops... xml parser error\n");
+ if (PianoXmlInitDoc (xml, &doc, &docRoot) != PIANO_RET_OK) {
return PIANO_RET_ERR;
}
- docRoot = xmlDocGetRootElement (doc);
-
xmlNode *val = docRoot->children->children->children->children;
if (xmlStrEqual (val->content, (xmlChar *) "1")) {
ret = PIANO_RET_OK;
@@ -399,16 +400,12 @@ void PianoXmlParseSearchCb (char *key, xmlNode *value, void *data) {
*/
void PianoXmlParseSearch (char *searchXml,
PianoSearchResult_t *searchResult) {
- /* FIXME: copy & waste */
- xmlNode *docRoot = NULL, *curNode = NULL;
- xmlDocPtr doc = xmlReadDoc ((xmlChar *) searchXml, NULL, NULL, 0);
+ xmlNode *docRoot, *curNode;
+ xmlDocPtr doc;
- if (doc == NULL) {
- printf ("whoops... xml parser error\n");
+ if (PianoXmlInitDoc (searchXml, &doc, &docRoot) != PIANO_RET_OK) {
return;
}
-
- docRoot = xmlDocGetRootElement (doc);
xmlNode *structRoot = docRoot->children->children->children->children;
/* we need a "clean" search result (with null pointers) */