| 1899 | |
| 1900 | |
| 1901 | GHashTable * |
| 1902 | xml2list(xmlNode *parent) |
| 1903 | { |
| 1904 | xmlNode *child = NULL; |
| 1905 | xmlAttrPtr pIter = NULL; |
| 1906 | xmlNode *nvpair_list = NULL; |
| 1907 | GHashTable *nvpair_hash = g_hash_table_new_full( |
| 1908 | crm_str_hash, g_str_equal, |
| 1909 | g_hash_destroy_str, g_hash_destroy_str); |
| 1910 | |
| 1911 | CRM_CHECK(parent != NULL, return nvpair_hash); |
| 1912 | |
| 1913 | nvpair_list = find_xml_node(parent, XML_TAG_ATTRS, FALSE); |
| 1914 | if(nvpair_list == NULL) { |
| 1915 | crm_trace("No attributes in %s", |
| 1916 | crm_element_name(parent)); |
| 1917 | crm_log_xml_trace( |
| 1918 | parent,"No attributes for resource op"); |
| 1919 | } |
| 1920 | |
| 1921 | crm_log_xml_trace(nvpair_list, "Unpacking"); |
| 1922 | |
| 1923 | for(pIter = crm_first_attr(nvpair_list); pIter != NULL; pIter = pIter->next) { |
| 1924 | const char *p_name = (const char *)pIter->name; |
| 1925 | const char *p_value = crm_attr_value(pIter); |
| 1926 | |
| 1927 | crm_trace("Added %s=%s", p_name, p_value); |
| 1928 | |
| 1929 | g_hash_table_insert(nvpair_hash, strdup(p_name), strdup(p_value)); |
| 1930 | } |
| 1931 | |
| 1932 | for(child = __xml_first_child(nvpair_list); child != NULL; child = __xml_next(child)) { |
| 1933 | if(strcmp((const char *)child->name, XML_TAG_PARAM) == 0) { |
| 1934 | const char *key = crm_element_value(child, XML_NVPAIR_ATTR_NAME); |
| 1935 | const char *value = crm_element_value(child, XML_NVPAIR_ATTR_VALUE); |
| 1936 | crm_trace("Added %s=%s", key, value); |
| 1937 | if(key != NULL && value != NULL) { |
| 1938 | g_hash_table_insert(nvpair_hash, strdup(key), strdup(value)); |
| 1939 | } |
| 1940 | } |
| 1941 | } |
| 1942 | |
| 1943 | return nvpair_hash; |
| 1944 | } |
| 1945 | |
| 1946 | |
| 1947 | typedef struct name_value_s |
no test coverage detected