Improve ast_agi_fdprintf() by using the ast_str() API.

* Use a thread local ast_str for building the string that will be written out
   to the console for debug, and to the FD for the AGI itself, instead of allocating
   a buffer on the heap every time the function is called.
 * Use the information contained within the ast_str to determine how many bytes
   need to be written instead of calling strlen().


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@77791 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2007-07-30 19:35:33 +00:00
parent 06f618a1ca
commit 38bb9400de

View File

@@ -115,14 +115,20 @@ enum agi_result {
static agi_command *find_command(char *cmds[], int exact);
AST_THREADSTORAGE(agi_buf);
#define AGI_BUF_INITSIZE 256
int ast_agi_fdprintf(int fd, char *fmt, ...)
{
char *stuff;
int res = 0;
va_list ap;
struct ast_str *buf;
if (!(buf = ast_str_thread_get(&agi_buf, AGI_BUF_INITSIZE)))
return -1;
va_start(ap, fmt);
res = vasprintf(&stuff, fmt, ap);
res = ast_str_set_va(&buf, 0, fmt, ap);
va_end(ap);
if (res == -1) {
@@ -131,9 +137,9 @@ int ast_agi_fdprintf(int fd, char *fmt, ...)
}
if (agidebug)
ast_verbose("AGI Tx >> %s", stuff);
ast_carefulwrite(fd, stuff, strlen(stuff), 100);
ast_free(stuff);
ast_verbose("AGI Tx >> %s", buf->str);
ast_carefulwrite(fd, buf->str, buf->used, 100);
return res;
}