Blame libdleyna/server/xml-util.c

Packit Service ce9802
/*
Packit Service ce9802
 * dLeyna
Packit Service ce9802
 *
Packit Service ce9802
 * Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
Packit Service ce9802
 *
Packit Service ce9802
 * This program is free software; you can redistribute it and/or modify it
Packit Service ce9802
 * under the terms and conditions of the GNU Lesser General Public License,
Packit Service ce9802
 * version 2.1, as published by the Free Software Foundation.
Packit Service ce9802
 *
Packit Service ce9802
 * This program is distributed in the hope it will be useful, but WITHOUT
Packit Service ce9802
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
Packit Service ce9802
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
Packit Service ce9802
 * for more details.
Packit Service ce9802
 *
Packit Service ce9802
 * You should have received a copy of the GNU Lesser General Public License
Packit Service ce9802
 * along with this program; if not, write to the Free Software Foundation, Inc.,
Packit Service ce9802
 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
Packit Service ce9802
 *
Packit Service ce9802
 * Christophe Guiraud <christophe.guiraud@intel.com>
Packit Service ce9802
 *
Packit Service ce9802
 */
Packit Service ce9802
Packit Service ce9802
#include <string.h>
Packit Service ce9802
#include <stdlib.h>
Packit Service ce9802
Packit Service ce9802
#include "xml-util.h"
Packit Service ce9802
Packit Service ce9802
static xmlNode *prv_get_child_node(xmlNode *node, va_list args)
Packit Service ce9802
{
Packit Service ce9802
	const gchar *name;
Packit Service ce9802
Packit Service ce9802
	name = va_arg(args, const gchar *);
Packit Service ce9802
	while (name != NULL) {
Packit Service ce9802
		node = node->children;
Packit Service ce9802
		while (node != NULL) {
Packit Service ce9802
			if (node->name != NULL &&
Packit Service ce9802
			    !strcmp(name, (char *)node->name))
Packit Service ce9802
				break;
Packit Service ce9802
Packit Service ce9802
			node = node->next;
Packit Service ce9802
		}
Packit Service ce9802
Packit Service ce9802
		if (node == NULL)
Packit Service ce9802
			break;
Packit Service ce9802
Packit Service ce9802
		name = va_arg(args, const gchar *);
Packit Service ce9802
	}
Packit Service ce9802
Packit Service ce9802
	return node;
Packit Service ce9802
}
Packit Service ce9802
Packit Service ce9802
static GList *prv_get_children_list(xmlNode *node, const gchar *name)
Packit Service ce9802
{
Packit Service ce9802
	GList *child_list = NULL;
Packit Service ce9802
Packit Service ce9802
	node = node->children;
Packit Service ce9802
	while (node != NULL) {
Packit Service ce9802
		if (node->name != NULL &&
Packit Service ce9802
		    !strcmp(name, (char *)node->name))
Packit Service ce9802
			child_list = g_list_prepend(child_list, node);
Packit Service ce9802
Packit Service ce9802
		node = node->next;
Packit Service ce9802
	}
Packit Service ce9802
Packit Service ce9802
	return child_list;
Packit Service ce9802
}
Packit Service ce9802
Packit Service ce9802
GList *xml_util_get_child_string_list_content_by_name(xmlNode *node, ...)
Packit Service ce9802
{
Packit Service ce9802
	xmlChar *content;
Packit Service ce9802
	va_list args;
Packit Service ce9802
	GList *child_list = NULL;
Packit Service ce9802
	GList *next;
Packit Service ce9802
	GList *str_list = NULL;
Packit Service ce9802
	xmlNode *child_list_node;
Packit Service ce9802
	xmlNode *child_node;
Packit Service ce9802
Packit Service ce9802
	va_start(args, node);
Packit Service ce9802
Packit Service ce9802
	child_node = prv_get_child_node(node, args);
Packit Service ce9802
Packit Service ce9802
	va_end(args);
Packit Service ce9802
Packit Service ce9802
	if (child_node != NULL) {
Packit Service ce9802
		child_list = prv_get_children_list(child_node->parent,
Packit Service ce9802
					(const gchar *)child_node->name);
Packit Service ce9802
		next = child_list;
Packit Service ce9802
		while (next) {
Packit Service ce9802
			child_list_node = (xmlNode *)next->data;
Packit Service ce9802
Packit Service ce9802
			content = xmlNodeGetContent(child_list_node);
Packit Service ce9802
Packit Service ce9802
			if (content != NULL) {
Packit Service ce9802
				str_list = g_list_prepend(str_list,
Packit Service ce9802
						  g_strdup((gchar *)content));
Packit Service ce9802
Packit Service ce9802
				xmlFree(content);
Packit Service ce9802
			}
Packit Service ce9802
Packit Service ce9802
			next = g_list_next(next);
Packit Service ce9802
		}
Packit Service ce9802
Packit Service ce9802
		g_list_free(child_list);
Packit Service ce9802
	}
Packit Service ce9802
Packit Service ce9802
	return str_list;
Packit Service ce9802
}
Packit Service ce9802
Packit Service ce9802
gchar *xml_util_get_child_string_content_by_name(xmlNode *node, ...)
Packit Service ce9802
{
Packit Service ce9802
	xmlChar *content;
Packit Service ce9802
	va_list args;
Packit Service ce9802
	gchar *str = NULL;
Packit Service ce9802
	xmlNode *child_node;
Packit Service ce9802
Packit Service ce9802
	va_start(args, node);
Packit Service ce9802
Packit Service ce9802
	child_node = prv_get_child_node(node, args);
Packit Service ce9802
Packit Service ce9802
	va_end(args);
Packit Service ce9802
Packit Service ce9802
	if (child_node != NULL) {
Packit Service ce9802
		content = xmlNodeGetContent(child_node);
Packit Service ce9802
Packit Service ce9802
		if (content != NULL) {
Packit Service ce9802
			str = g_strdup((gchar *)content);
Packit Service ce9802
Packit Service ce9802
			xmlFree(content);
Packit Service ce9802
		}
Packit Service ce9802
	}
Packit Service ce9802
Packit Service ce9802
	return str;
Packit Service ce9802
}