Merged revisions 328247 via svnmerge from
[asterisk/asterisk.git] / res / res_clialiases.c
index 1ea3024..d67f3ba 100644 (file)
@@ -26,6 +26,9 @@
  * CLI commands.
  */
 
+/*** MODULEINFO
+       <support_level>core</support_level>
+ ***/
 
 #include "asterisk.h"
 
@@ -98,10 +101,12 @@ static char *cli_alias_passthrough(struct ast_cli_entry *e, int cmd, struct ast_
        case CLI_GENERATE:
                line = a->line;
                line += (strlen(alias->alias));
-               if (!ast_strlen_zero(a->word)) {
+               if (!strncasecmp(alias->alias, alias->real_cmd, strlen(alias->alias))) {
+                       generator = NULL;
+               } else if (!ast_strlen_zero(a->word)) {
                        struct ast_str *real_cmd = ast_str_alloca(strlen(alias->real_cmd) + strlen(line) + 1);
                        ast_str_append(&real_cmd, 0, "%s%s", alias->real_cmd, line);
-                       generator = ast_cli_generator(real_cmd->str, a->word, a->n);
+                       generator = ast_cli_generator(ast_str_buffer(real_cmd), a->word, a->n);
                } else {
                        generator = ast_cli_generator(alias->real_cmd, a->word, a->n);
                }
@@ -121,7 +126,7 @@ static char *cli_alias_passthrough(struct ast_cli_entry *e, int cmd, struct ast_
                        ast_str_append(&real_cmd, 0, " %s", a->argv[i - 1]);
                }
 
-               ast_cli_command(a->fd, real_cmd->str);
+               ast_cli_command(a->fd, ast_str_buffer(real_cmd));
        } else {
                ast_cli_command(a->fd, alias->real_cmd);
        }
@@ -152,10 +157,10 @@ static char *alias_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a
        ast_cli(a->fd, FORMAT, "Alias Command", "Real Command");
 
        i = ao2_iterator_init(cli_aliases, 0);
-
        for (; (alias = ao2_iterator_next(&i)); ao2_ref(alias, -1)) {
                ast_cli(a->fd, FORMAT, alias->alias, alias->real_cmd);
        }
+       ao2_iterator_destroy(&i);
 
        return CLI_SUCCESS;
 #undef FORMAT
@@ -166,12 +171,6 @@ static struct ast_cli_entry cli_alias[] = {
        AST_CLI_DEFINE(alias_show, "Show CLI command aliases"),
 };
 
-/*! \brief Function called to to see if an alias is marked for destruction, they always are! */
-static int alias_marked(void *obj, void *arg, int flags)
-{
-       return CMP_MATCH;
-}
-
 /*! \brief Function called to load or reload the configuration file */
 static void load_config(int reload)
 {
@@ -189,7 +188,7 @@ static void load_config(int reload)
 
        /* Destroy any existing CLI aliases */
        if (reload) {
-               ao2_callback(cli_aliases, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE , alias_marked, NULL);
+               ao2_callback(cli_aliases, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL);
        }
 
        for (v = ast_variable_browse(cfg, "general"); v; v = v->next) {
@@ -208,7 +207,7 @@ static void load_config(int reload)
                        strcpy(alias->real_cmd, v1->value);
                        alias->cli_entry.handler = cli_alias_passthrough;
                        alias->cli_entry.command = alias->alias;
-                       alias->cli_entry.usage = "Aliased CLI Command";
+                       alias->cli_entry.usage = "Aliased CLI Command\n";
 
                        ast_cli_register(&alias->cli_entry);
                        ao2_link(cli_aliases, alias);