From 7e890dd49c2c81424c9f475ef4bf3ff522e42f5e Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Mon, 17 Oct 2005 15:41:55 +0000 Subject: Handle device state changes properly when formatting characters are present (bug #5450, new patch) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6806 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- devicestate.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'devicestate.c') 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) { -- cgit v1.2.3