diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-06-06 21:09:59 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-06-06 21:09:59 +0000 |
commit | 09f3094700013cd98ad62e36384942be94348225 (patch) | |
tree | ea27350507953986bed7ff7cf8c0f40571622864 /asterisk.c | |
parent | b2cbb6a75dfc8ea70554192ea223c3bd5dd52ed8 (diff) |
another round of version tag updates, along with 'show version files' pattern filtering
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5865 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'asterisk.c')
-rwxr-xr-x | asterisk.c | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/asterisk.c b/asterisk.c index 91db7d9a5..00a1b509a 100755 --- a/asterisk.c +++ b/asterisk.c @@ -153,9 +153,9 @@ static int restartnow = 0; static pthread_t consolethread = AST_PTHREADT_NULL; struct file_version { - const char *file; - const char *version; AST_LIST_ENTRY(file_version) list; + const char *file; + char *version; }; static AST_LIST_HEAD_STATIC(file_versions, file_version); @@ -163,13 +163,20 @@ static AST_LIST_HEAD_STATIC(file_versions, file_version); void ast_register_file_version(const char *file, const char *version) { struct file_version *new; + char *work; + size_t version_length; - new = calloc(1, sizeof(*new)); + work = ast_strdupa(version); + work = ast_strip(ast_strip_quoted(work, "$", "$")); + version_length = strlen(work) + 1; + + new = calloc(1, sizeof(*new) + version_length); if (!new) return; new->file = file; - new->version = version; + new->version = (char *) new + sizeof(*new); + memcpy(new->version, work, version_length); AST_LIST_LOCK(&file_versions); AST_LIST_INSERT_HEAD(&file_versions, new, list); AST_LIST_UNLOCK(&file_versions); @@ -188,6 +195,8 @@ void ast_unregister_file_version(const char *file) } AST_LIST_TRAVERSE_SAFE_END; AST_LIST_UNLOCK(&file_versions); + if (find) + free(find); } static char show_version_files_help[] = @@ -197,14 +206,42 @@ static char show_version_files_help[] = static int handle_show_version_files(int fd, int argc, char *argv[]) { +#define FORMAT "%-25.25s %-20.20s\n" struct file_version *iterator; + regex_t regexbuf; + int havepattern = 0; + + switch (argc) { + case 5: + if (!strcasecmp(argv[3], "like")) { + if (regcomp(®exbuf, argv[4], REG_EXTENDED | REG_NOSUB)) + return RESULT_SHOWUSAGE; + havepattern = 1; + } else + return RESULT_SHOWUSAGE; + break; + case 3: + 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) { - ast_cli(fd, "%-25.25s %-20.20s\n", iterator->file, iterator->version); + if (havepattern && regexec(®exbuf, iterator->file, 0, NULL, 0)) + continue; + + ast_cli(fd, FORMAT, iterator->file, iterator->version); } AST_LIST_UNLOCK(&file_versions); + + if (havepattern) + regfree(®exbuf); + return RESULT_SUCCESS; +#undef FORMAT } static char *complete_show_version_files(char *line, char *word, int pos, int state) |