Bug 6699 - Fix for ENUMLOOKUP
authorTilghman Lesher <tilghman@meg.abyt.es>
Tue, 21 Mar 2006 05:54:04 +0000 (05:54 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Tue, 21 Mar 2006 05:54:04 +0000 (05:54 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@13710 65c4cc65-6c06-0410-ace0-fbb531ad65f3

funcs/func_enum.c

index 7cd73c7..5f1b01d 100644 (file)
@@ -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;
 }