From 96795014d914e8498587c7568748f2c13473ec7e Mon Sep 17 00:00:00 2001 From: Liviu Chircu Date: Thu, 23 Mar 2017 11:36:23 +0200 Subject: [PATCH] xml: Code refactoring Less code that works better (_a lot_ less reallocs). Win-win! --- modules/xml/xml.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/modules/xml/xml.c b/modules/xml/xml.c index ef90248422..cb5bae028b 100644 --- a/modules/xml/xml.c +++ b/modules/xml/xml.c @@ -511,12 +511,10 @@ int pv_get_xml(struct sip_msg* msg, pv_param_t* pvp, pv_value_t* res) LM_ERR("Unable to dump node to xml buffer\n"); goto err_free_xml_buf; } - if (res_buf.len < xml_buf_len) { - res_buf.s = pkg_realloc(res_buf.s, xml_buf_len); - if (!res_buf.s) { - LM_ERR("No more pkg mem\n"); - goto err_free_xml_buf; - } + + if (pkg_str_resize(&res_buf, xml_buf_len) != 0) { + LM_ERR("No more pkg mem\n"); + goto err_free_xml_buf; } xml_buf_s = (char *)xmlBufferContent(xml_buf); @@ -525,12 +523,11 @@ int pv_get_xml(struct sip_msg* msg, pv_param_t* pvp, pv_value_t* res) goto err_free_xml_buf; } memcpy(res_buf.s, xml_buf_s, xml_buf_len); - res_buf.len = xml_buf_len; xmlBufferFree(xml_buf); res->rs.s = res_buf.s; - res->rs.len = res_buf.len; + res->rs.len = xml_buf_len; break; case ACCESS_EL_VAL: @@ -546,12 +543,9 @@ int pv_get_xml(struct sip_msg* msg, pv_param_t* pvp, pv_value_t* res) } xml_buf_len = xmlBufferLength(xml_buf); - if (res_buf.len < xml_buf_len) { - res_buf.s = pkg_realloc(res_buf.s, xml_buf_len); - if (!res_buf.s) { - LM_ERR("No more pkg mem\n"); - goto err_free_xml_buf; - } + if (pkg_str_resize(&res_buf, xml_buf_len) != 0) { + LM_ERR("No more pkg mem\n"); + goto err_free_xml_buf; } xml_buf_s = (char *)xmlBufferContent(xml_buf); @@ -560,12 +554,11 @@ int pv_get_xml(struct sip_msg* msg, pv_param_t* pvp, pv_value_t* res) goto err_free_xml_buf; } memcpy(res_buf.s, xml_buf_s, xml_buf_len); - res_buf.len = xml_buf_len; xmlBufferFree(xml_buf); res->rs.s = res_buf.s; - res->rs.len = res_buf.len; + res->rs.len = xml_buf_len; break; case ACCESS_EL_ATTR: