[asterisk-commits] rizzo: trunk r48551 -
/trunk/funcs/func_realtime.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sun Dec 17 15:57:46 MST 2006
Author: rizzo
Date: Sun Dec 17 16:57:46 2006
New Revision: 48551
URL: http://svn.digium.com/view/asterisk?view=rev&rev=48551
Log:
replace ast_build_string() with ast_str_*().
Unless i am very mistaken, function_realtime_read() was
broken in that it would always return an empty string
(because ast_build_string() advanced the pointer to the
end of the string, and there was no reference to the
initial value.
This commit should fix this problem.
Modified:
trunk/funcs/func_realtime.c
Modified: trunk/funcs/func_realtime.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_realtime.c?view=diff&rev=48551&r1=48550&r2=48551
==============================================================================
--- trunk/funcs/func_realtime.c (original)
+++ trunk/funcs/func_realtime.c Sun Dec 17 16:57:46 2006
@@ -49,8 +49,9 @@
{
struct ast_variable *var, *head;
struct ast_module_user *u;
- char *results;
- size_t resultslen = 0;
+ struct ast_str *out;
+ size_t resultslen;
+ int n;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(family);
AST_APP_ARG(fieldmatch);
@@ -80,13 +81,17 @@
ast_module_user_remove(u);
return -1;
}
+ resultslen = 0;
+ n = 0;
+ for (var = head; var; n++, var = var->next)
+ resultslen += strlen(var->name) + strlen(var->value);
+ /* add space for delimiters and final '\0' */
+ resultslen += n * (strlen(args.delim1) + strlen(args.delim2)) + 1;
+
+ out = ast_str_alloca(resultslen);
for (var = head; var; var = var->next)
- resultslen += strlen(var->name) + strlen(var->value) + 2;
-
- results = alloca(resultslen);
- for (var = head; var; var = var->next)
- ast_build_string(&results, &resultslen, "%s%s%s%s", var->name, args.delim2, var->value, args.delim1);
- ast_copy_string(buf, results, len);
+ ast_str_append(&out, 0, "%s%s%s%s", var->name, args.delim2, var->value, args.delim1);
+ ast_copy_string(buf, out->str, len);
ast_module_user_remove(u);
More information about the asterisk-commits
mailing list