mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user