diff options
Diffstat (limited to 'src/manager/lib/xml.c')
-rw-r--r-- | src/manager/lib/xml.c | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/src/manager/lib/xml.c b/src/manager/lib/xml.c deleted file mode 100644 index 008235b69..000000000 --- a/src/manager/lib/xml.c +++ /dev/null @@ -1,169 +0,0 @@ -/** - * @file xml.c - * - * @brief Implementation of xml_t. - * - */ - -/* - * Copyright (C) 2007 Martin Willi - * Hochschule fuer Technik Rapperswil - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -#include "xml.h" - -#include <libxml/parser.h> -#include <libxml/tree.h> - - -typedef struct private_xml_t private_xml_t; - -/** - * private data of xml - */ -struct private_xml_t { - - /** - * public functions - */ - xml_t public; - - /** - * root node of this xml (part) - */ - xmlNode *node; - - /** - * document, only for root xml_t - */ - xmlDoc *doc; - - /** - * Root xml_t* - */ - private_xml_t *root; - - /** - * number of enumerator instances - */ - int enums; -}; - -/** - * child element enumerator - */ -typedef struct { - /** enumerator interface */ - enumerator_t e; - /** current child context (returned to enumerate() caller) */ - private_xml_t child; - /** currently processing node */ - xmlNode *node; -} child_enum_t; - -/** - * Implementation of xml_t.children().enumerate(). - */ -static bool child_enumerate(child_enum_t *e, private_xml_t **child, - char **name, char **value) -{ - while (e->node && e->node->type != XML_ELEMENT_NODE) - { - e->node = e->node->next; - } - if (e->node) - { - xmlNode *text; - - text = e->node->children; - *value = NULL; - - while (text && text->type != XML_TEXT_NODE) - { - text = text->next; - } - if (text) - { - *value = text->content; - } - *name = (char*)e->node->name; - *child = &e->child; - e->child.node = e->node->children; - e->node = e->node->next; - return TRUE; - } - return FALSE; -} - -/** - * Implementation of xml_t.get_attribute. - */ -static char* get_attribute(private_xml_t *this, char *name) -{ - return NULL; -} - -/** - * destroy enumerator, and complete tree if this was the last enumerator - */ -static void child_destroy(child_enum_t *this) -{ - if (--this->child.root->enums == 0) - { - xmlFreeDoc(this->child.root->doc); - free(this->child.root); - } - free(this); -} - -/** - * Implementation of xml_t.children. - */ -static enumerator_t* children(private_xml_t *this) -{ - child_enum_t *ce = malloc_thing(child_enum_t); - ce->e.enumerate = (void*)child_enumerate; - ce->e.destroy = (void*)child_destroy; - ce->node = this->node; - ce->child.public.children = (void*)children; - ce->child.public.get_attribute = (void*)get_attribute; - ce->child.node = NULL; - ce->child.doc = this->doc; - ce->child.root = this->root; - this->root->enums++; - return &ce->e; -} - -/* - * see header file - */ -xml_t *xml_create(char *xml) -{ - private_xml_t *this = malloc_thing(private_xml_t); - - this->public.get_attribute = (char*(*)(xml_t*,char*))get_attribute; - this->public.children = (enumerator_t*(*)(xml_t*))children; - - this->doc = xmlReadMemory(xml, strlen(xml), NULL, NULL, 0); - if (this->doc == NULL) - { - free(this); - return NULL; - } - this->node = xmlDocGetRootElement(this->doc); - this->root = this; - this->enums = 0; - - return &this->public; -} - |