diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-17 15:41:55 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-17 15:41:55 +0000 |
commit | 76bd457fcd1744499e2185919ac9dc915e131e2f (patch) | |
tree | f9fd3105f5cc9a16da23695ab3828ff1527d95fb /devicestate.c | |
parent | c28828ebddf2d472ed379a164fd9e244fcb97e69 (diff) |
Handle device state changes properly when formatting characters are present (bug #5450, new patch)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6806 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'devicestate.c')
-rwxr-xr-x | devicestate.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/devicestate.c b/devicestate.c index 3b5c581f4..c85f9a8fe 100755 --- a/devicestate.c +++ b/devicestate.c @@ -193,22 +193,14 @@ static void do_state_change(const char *device) ast_hint_state_changed(device); } -/*--- ast_device_state_changed: Accept change notification, add it to change queue */ -int ast_device_state_changed(const char *fmt, ...) +static int __ast_device_state_changed_literal(char *buf) { - char buf[AST_MAX_EXTENSION]; char *device; char *parse; struct state_change *change = NULL; - va_list ap; - - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); parse = buf; device = strsep(&parse, "-"); - if (change_thread != AST_PTHREADT_NULL) change = calloc(1, sizeof(*change) + strlen(device)); @@ -230,6 +222,25 @@ int ast_device_state_changed(const char *fmt, ...) return 1; } +int ast_device_state_changed_literal(const char *dev) +{ + char *buf; + buf = ast_strdupa(dev); + return __ast_device_state_changed_literal(buf); +} + +/*--- ast_device_state_changed: Accept change notification, add it to change queue */ +int ast_device_state_changed(const char *fmt, ...) +{ + char buf[AST_MAX_EXTENSION]; + va_list ap; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return __ast_device_state_changed_literal(buf); +} + /*--- do_devstate_changes: Go through the dev state change queue and update changes in the dev state thread */ static void *do_devstate_changes(void *data) { |