mirror of
https://github.com/asterisk/asterisk.git
synced 2026-05-05 21:04:01 +00:00
Allow both of the show version files and core show file versions CLI commands to work. (issue #9135 reported by mvanbaak)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@56783 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -540,7 +540,7 @@ static char show_version_files_help[] =
|
||||
" Optional regular expression pattern is used to filter the file list.\n";
|
||||
|
||||
/*! \brief CLI command to list module versions */
|
||||
static int handle_show_version_files(int fd, int argc, char *argv[])
|
||||
static int handle_show_version_files_deprecated(int fd, int argc, char *argv[])
|
||||
{
|
||||
#define FORMAT "%-25.25s %-40.40s\n"
|
||||
struct file_version *iterator;
|
||||
@@ -594,7 +594,61 @@ static int handle_show_version_files(int fd, int argc, char *argv[])
|
||||
#undef FORMAT
|
||||
}
|
||||
|
||||
static char *complete_show_version_files(const char *line, const char *word, int pos, int state)
|
||||
static int handle_show_version_files(int fd, int argc, char *argv[])
|
||||
{
|
||||
#define FORMAT "%-25.25s %-40.40s\n"
|
||||
struct file_version *iterator;
|
||||
regex_t regexbuf;
|
||||
int havepattern = 0;
|
||||
int havename = 0;
|
||||
int count_files = 0;
|
||||
|
||||
switch (argc) {
|
||||
case 6:
|
||||
if (!strcasecmp(argv[4], "like")) {
|
||||
if (regcomp(®exbuf, argv[5], REG_EXTENDED | REG_NOSUB))
|
||||
return RESULT_SHOWUSAGE;
|
||||
havepattern = 1;
|
||||
} else
|
||||
return RESULT_SHOWUSAGE;
|
||||
break;
|
||||
case 5:
|
||||
havename = 1;
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
default:
|
||||
return RESULT_SHOWUSAGE;
|
||||
}
|
||||
|
||||
ast_cli(fd, FORMAT, "File", "Revision");
|
||||
ast_cli(fd, FORMAT, "----", "--------");
|
||||
AST_LIST_LOCK(&file_versions);
|
||||
AST_LIST_TRAVERSE(&file_versions, iterator, list) {
|
||||
if (havename && strcasecmp(iterator->file, argv[4]))
|
||||
continue;
|
||||
|
||||
if (havepattern && regexec(®exbuf, iterator->file, 0, NULL, 0))
|
||||
continue;
|
||||
|
||||
ast_cli(fd, FORMAT, iterator->file, iterator->version);
|
||||
count_files++;
|
||||
if (havename)
|
||||
break;
|
||||
}
|
||||
AST_LIST_UNLOCK(&file_versions);
|
||||
if (!havename) {
|
||||
ast_cli(fd, "%d files listed.\n", count_files);
|
||||
}
|
||||
|
||||
if (havepattern)
|
||||
regfree(®exbuf);
|
||||
|
||||
return RESULT_SUCCESS;
|
||||
#undef FORMAT
|
||||
}
|
||||
|
||||
static char *complete_show_version_files_deprecated(const char *line, const char *word, int pos, int state)
|
||||
{
|
||||
struct file_version *find;
|
||||
int which = 0;
|
||||
@@ -615,6 +669,29 @@ static char *complete_show_version_files(const char *line, const char *word, int
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char *complete_show_version_files(const char *line, const char *word, int pos, int state)
|
||||
{
|
||||
struct file_version *find;
|
||||
int which = 0;
|
||||
char *ret = NULL;
|
||||
int matchlen = strlen(word);
|
||||
|
||||
if (pos != 4)
|
||||
return NULL;
|
||||
|
||||
AST_LIST_LOCK(&file_versions);
|
||||
AST_LIST_TRAVERSE(&file_versions, find, list) {
|
||||
if (!strncasecmp(word, find->file, matchlen) && ++which > state) {
|
||||
ret = ast_strdup(find->file);
|
||||
break;
|
||||
}
|
||||
}
|
||||
AST_LIST_UNLOCK(&file_versions);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* ! LOW_MEMORY */
|
||||
|
||||
int ast_register_atexit(void (*func)(void))
|
||||
@@ -1550,8 +1627,8 @@ static struct ast_cli_entry cli_show_version_deprecated = {
|
||||
#if !defined(LOW_MEMORY)
|
||||
static struct ast_cli_entry cli_show_version_files_deprecated = {
|
||||
{ "show", "version", "files", NULL },
|
||||
handle_show_version_files, NULL,
|
||||
NULL, complete_show_version_files };
|
||||
handle_show_version_files_deprecated, NULL,
|
||||
NULL, complete_show_version_files_deprecated };
|
||||
|
||||
static struct ast_cli_entry cli_show_profile_deprecated = {
|
||||
{ "show", "profile", NULL },
|
||||
|
||||
Reference in New Issue
Block a user