[Freeswitch-svn] [commit] r12684 - freeswitch/trunk/src
FreeSWITCH SVN
brian at freeswitch.org
Fri Mar 20 07:31:15 PDT 2009
Author: brian
Date: Fri Mar 20 09:31:15 2009
New Revision: 12684
Log:
FSCORE-333
Modified:
freeswitch/trunk/src/switch_xml.c
Modified: freeswitch/trunk/src/switch_xml.c
==============================================================================
--- freeswitch/trunk/src/switch_xml.c (original)
+++ freeswitch/trunk/src/switch_xml.c Fri Mar 20 09:31:15 2009
@@ -2022,9 +2022,14 @@
static char *switch_xml_toxml_r(switch_xml_t xml, char **s, switch_size_t *len, switch_size_t *max, switch_size_t start, char ***attr, uint32_t * count)
{
int i, j;
- char *txt = (char *)(xml->parent) ? xml->parent->txt : (char *)"";
- switch_size_t off = 0;
- uint32_t lcount = 0;
+ char *txt;
+ switch_size_t off;
+ uint32_t lcount;
+
+tailrecurse:
+ off = 0;
+ lcount = 0;
+ txt = (char *)(xml->parent) ? xml->parent->txt : (char *)"";
/* parent character content up to this tag */
*s = switch_xml_ampencode(txt + start, xml->off - start, s, len, max, 0);
@@ -2101,8 +2106,12 @@
off++; /* make sure off is within bounds */
if (xml->ordered) {
+ xml = xml->ordered;
+ start = off;
+ goto tailrecurse;
+/*
return switch_xml_toxml_r(xml->ordered, s, len, max, off, attr, count);
-
+*/
} else {
if (*count > 0)
(*count)--;
@@ -2197,11 +2206,13 @@
/* free the memory allocated for the switch_xml structure */
SWITCH_DECLARE(void) switch_xml_free(switch_xml_t xml)
{
- switch_xml_root_t root = (switch_xml_root_t) xml;
+ switch_xml_root_t root;
int i, j;
char **a, *s;
+ switch_xml_t orig_xml;
-
+tailrecurse:
+ root = (switch_xml_root_t) xml;
if (!xml) {
return;
}
@@ -2221,7 +2232,7 @@
}
switch_xml_free(xml->child);
- switch_xml_free(xml->ordered);
+ /*switch_xml_free(xml->ordered);*/
if (!xml->parent) { /* free root tag allocations */
for (i = 10; root->ent[i]; i += 2) /* 0 - 9 are default entities (<>&"') */
@@ -2261,6 +2272,12 @@
free(xml->txt); /* character content */
if ((xml->flags & SWITCH_XML_NAMEM))
free(xml->name); /* tag name */
+ if (xml->ordered) {
+ orig_xml = xml;
+ xml = xml->ordered;
+ free(orig_xml);
+ goto tailrecurse;
+ }
free(xml);
}
More information about the Freeswitch-svn
mailing list