aboutsummaryrefslogtreecommitdiffstats
path: root/funcs
diff options
context:
space:
mode:
Diffstat (limited to 'funcs')
-rw-r--r--funcs/func_enum.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/funcs/func_enum.c b/funcs/func_enum.c
index 7cd73c750..5f1b01d56 100644
--- a/funcs/func_enum.c
+++ b/funcs/func_enum.c
@@ -64,7 +64,7 @@ static int function_enum(struct ast_channel *chan, char *cmd, char *data,
);
int res = 0;
char tech[80];
- char dest[256] = "";
+ char dest[256] = "", tmp[2] = "", num[AST_MAX_EXTENSION] = "";
struct localuser *u;
char *s, *p;
@@ -82,6 +82,8 @@ static int function_enum(struct ast_channel *chan, char *cmd, char *data,
return -1;
}
+ LOCAL_USER_ADD(u);
+
ast_copy_string(tech, args.tech ? args.tech : "sip", sizeof(tech));
if (!args.zone)
@@ -92,24 +94,24 @@ static int function_enum(struct ast_channel *chan, char *cmd, char *data,
/* strip any '-' signs from number */
for (s = p = args.number; *s; s++) {
- if (*s != '-')
- *p++ = *s;
- }
- *p = '\0';
+ if (*s != '-') {
+ snprintf(tmp, sizeof(tmp), "%c", *s);
+ strncat(num, tmp, sizeof(num));
+ }
- LOCAL_USER_ADD(u);
+ }
- res = ast_get_enum(chan, p, dest, sizeof(dest), tech, sizeof(tech), args.zone,
+ res = ast_get_enum(chan, num, dest, sizeof(dest), tech, sizeof(tech), args.zone,
args.options);
- LOCAL_USER_REMOVE(u);
-
p = strchr(dest, ':');
if (p && strcasecmp(tech, "ALL"))
ast_copy_string(buf, p + 1, len);
else
ast_copy_string(buf, dest, len);
+ LOCAL_USER_REMOVE(u);
+
return 0;
}