Author: anthm Date: Wed Dec 6 19:36:00 2006 New Revision: 3561 Modified: freeswitch/trunk/src/switch_channel.c Log: come down from the acid trip from the last commit Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Wed Dec 6 19:36:00 2006 @@ -1107,6 +1107,16 @@ } +#define resize(l) {\ +char *dp;\ +olen += (len + l + block);\ +cpos = c - data;\ +if ((dp = realloc(data, olen))) {\ + data = dp;\ + c = data + cpos;\ + memset(c, 0, olen - cpos);\ + }} \ + SWITCH_DECLARE(char *) switch_channel_expand_variables(switch_channel_t *channel, char *in) { char *p, *c; @@ -1129,15 +1139,17 @@ if (*p == '$') { vtype = 1; + if (*(p+1) != '{') { + vtype = 2; + } } - if (*(p+1) != '{') { - vtype = 2; - } - + if (vtype) { char *s = p, *e, *vname, *vval = NULL; size_t nlen; + s++; + if (vtype == 1 && *s == '{') { br = 1; s++; @@ -1195,24 +1207,23 @@ } if ((nlen = sub_val ? strlen(sub_val) : 0)) { if (len + nlen >= olen) { - char *dp; - olen += (len + nlen + block); - cpos = c - data; - if ((dp = realloc(data, olen))) { - data = dp; - c = data + cpos; - memset(c, 0, olen - cpos); - } + resize(nlen); } len += nlen; strcat(c, sub_val); c += nlen; - } switch_safe_free(func_val); + sub_val = NULL; + vname = NULL; + vtype = 0; } + if (len + 1 >= olen) { + resize(1); + } + if (sp) { *c++ = ' '; sp = 0;
participants (1)
-
Freeswitch SVN