MCPcopy Create free account
hub / github.com/ClusterLabs/pacemaker / sorted_xml

Function sorted_xml

lib/common/xml.c:1983–2025  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1981}
1982
1983xmlNode *
1984sorted_xml(xmlNode *input, xmlNode *parent, gboolean recursive)
1985{
1986 xmlNode *child = NULL;
1987 GListPtr sorted = NULL;
1988 GListPtr unsorted = NULL;
1989 name_value_t *pair = NULL;
1990 xmlNode *result = NULL;
1991 const char *name = NULL;
1992 xmlAttrPtr pIter = NULL;
1993
1994 CRM_CHECK(input != NULL, return NULL);
1995
1996 name = crm_element_name(input);
1997 CRM_CHECK(name != NULL, return NULL);
1998
1999 result = create_xml_node(parent, name);
2000
2001 for(pIter = crm_first_attr(input); pIter != NULL; pIter = pIter->next) {
2002 const char *p_name = (const char *)pIter->name;
2003 const char *p_value = crm_attr_value(pIter);
2004
2005 pair = calloc(1, sizeof(name_value_t));
2006 pair->name = p_name;
2007 pair->value = p_value;
2008 unsorted = g_list_prepend(unsorted, pair);
2009 pair = NULL;
2010 }
2011
2012 sorted = g_list_sort(unsorted, sort_pairs);
2013 g_list_foreach(sorted, dump_pair, result);
2014 g_list_free_full(sorted, free);
2015
2016 for(child = __xml_first_child(input); child != NULL; child = __xml_next(child)) {
2017 if(recursive) {
2018 sorted_xml(child, result, recursive);
2019 } else {
2020 add_node_copy(result, child);
2021 }
2022 }
2023
2024 return result;
2025}
2026
2027static void
2028filter_xml(xmlNode *data, filter_t *filter, int filter_len, gboolean recursive)

Callers 2

calculate_xml_digest_v1Function · 0.85
action2xmlFunction · 0.85

Calls 7

create_xml_nodeFunction · 0.85
crm_first_attrFunction · 0.85
crm_attr_valueFunction · 0.85
g_list_free_fullFunction · 0.85
__xml_first_childFunction · 0.85
__xml_nextFunction · 0.85
add_node_copyFunction · 0.85

Tested by

no test coverage detected