[commit] r13255 - in freeswitch/trunk/src: . include
Author: mrene Date: Thu May 7 16:40:21 2009 New Revision: 13255 Log: Add switch_xml_parse_str_dynamic and switch_xml_parse_str_dup Modified: freeswitch/trunk/src/include/switch_xml.h freeswitch/trunk/src/switch_xml.c Modified: freeswitch/trunk/src/include/switch_xml.h ============================================================================== --- freeswitch/trunk/src/include/switch_xml.h (original) +++ freeswitch/trunk/src/include/switch_xml.h Thu May 7 16:40:21 2009 @@ -98,6 +98,21 @@ uint32_t flags; }; +/*! + * \brief Parses a string into a switch_xml_t, ensuring the memory will be freed with switch_xml_free + * \param s The string to parse + * \param dup true if you want the string to be strdup()'d automatically + * \return the switch_xml_t or NULL if an error occured + */ +SWITCH_DECLARE(switch_xml_t) switch_xml_parse_str_dynamic(char *s, switch_bool_t dup); + +/*! + * \brief Parses a string into a switch_xml_t + * \param s The string to parse + * \return the switch_xml_t or NULL if an error occured + */ +#define switch_xml_parse_str_dup(x) switch_xml_parse_str_dynamic(x, SWITCH_TRUE) + ///\brief Given a string of xml data and its length, parses it and creates an switch_xml ///\ structure. For efficiency, modifies the data by adding null terminators ///\ and decoding ampersand sequences. If you don't want this, copy the data and Modified: freeswitch/trunk/src/switch_xml.c ============================================================================== --- freeswitch/trunk/src/switch_xml.c (original) +++ freeswitch/trunk/src/switch_xml.c Thu May 7 16:40:21 2009 @@ -902,6 +902,19 @@ free(attr); } +SWITCH_DECLARE(switch_xml_t) switch_xml_parse_str_dynamic(char *s, switch_bool_t dup) +{ + switch_xml_root_t root; + char *data = dup ? strdup(s) : s; + + if ((root = (switch_xml_root_t) switch_xml_parse_str(data, strlen(data)))) { + root->dynamic = 1; /* Make sure we free the memory is switch_xml_free() */ + return &root->xml; + } else { + return NULL; + } +} + /* parse the given xml string and return an switch_xml structure */ SWITCH_DECLARE(switch_xml_t) switch_xml_parse_str(char *s, switch_size_t len) { @@ -1552,14 +1565,9 @@ if ((conf = switch_xml_find_child(xml, "section", "name", section)) && (tag = switch_xml_find_child(conf, tag_name, key_name, key_value))) { if (clone) { - char *x; - switch_xml_root_t xmlroot = NULL; - x = switch_xml_toxml(tag, SWITCH_FALSE); + char *x = switch_xml_toxml(tag, SWITCH_FALSE); switch_assert(x); - xmlroot = (switch_xml_root_t)switch_xml_parse_str(x, strlen(x)); - xmlroot->dynamic = 1; /* free the memory in switch_xml_free */ - *root = (switch_xml_t)xmlroot; - *node = *root; + *node = *root = switch_xml_parse_str_dynamic(x, SWITCH_FALSE); /* x will be free()'d in switch_xml_free() */ switch_xml_free(xml); } else { *node = tag;
participants (1)
-
FreeSWITCH SVN