diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-03-12 17:58:25 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-03-12 17:58:25 +0000 |
commit | 4fcf0a326c6e1d1b06f9df9fc5ae39655c224ba3 (patch) | |
tree | a5f06b9657e80d403746a71a8a8c78ce9c461b72 | |
parent | 8469007d2c43a4fe1de55f1442f83823ed832e0d (diff) |
Merged revisions 181731 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r181731 | tilghman | 2009-03-12 12:32:13 -0500 (Thu, 12 Mar 2009) | 9 lines
Adjust translation table column widths based upon the translation times.
Previously, only 5 columns were displayed, and if a translation time exceeded
99,999 useconds, it would be displayed as 0, instead of its actual time.
(closes issue #14532)
Reported by: pj
Patches:
20090311__bug14532.diff.txt uploaded by tilghman (license 14)
Tested by: pj
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@181732 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | main/translate.c | 25 |
2 files changed, 18 insertions, 9 deletions
@@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac Revision: 180946 . +# From configure.ac Revision: 181450 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for asterisk 1.6. # diff --git a/main/translate.c b/main/translate.c index 53d17602a..1d6c155f4 100644 --- a/main/translate.c +++ b/main/translate.c @@ -29,6 +29,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include <sys/time.h> #include <sys/resource.h> +#include <math.h> #include "asterisk/lock.h" #include "asterisk/channel.h" @@ -518,7 +519,7 @@ static char *handle_cli_core_show_translation(struct ast_cli_entry *e, int cmd, { #define SHOW_TRANS 16 int x, y, z; - int curlen = 0, longest = 0; + int curlen = 0, longest = 0, magnitude[SHOW_TRANS] = { 0, }; switch (cmd) { case CLI_INIT: @@ -536,7 +537,7 @@ static char *handle_cli_core_show_translation(struct ast_cli_entry *e, int cmd, if (a->argc > 5) return CLI_SHOWUSAGE; - + if (a->argv[3] && !strcasecmp(a->argv[3], "recalc")) { z = a->argv[4] ? atoi(a->argv[4]) : 1; @@ -565,9 +566,14 @@ static char *handle_cli_core_show_translation(struct ast_cli_entry *e, int cmd, curlen = strlen(ast_getformatname(1 << (x))); if (curlen > longest) longest = curlen; + for (y = 0; y < SHOW_TRANS; y++) { + if (tr_matrix[x][y].cost > pow(10, magnitude[x])) { + magnitude[y] = floor(log10(tr_matrix[x][y].cost)); + } + } } for (x = -1; x < SHOW_TRANS; x++) { - struct ast_str *out = ast_str_alloca(120); + struct ast_str *out = ast_str_alloca(125); /*Go ahead and move to next iteration if dealing with an unknown codec*/ if(x >= 0 && !strcmp(ast_getformatname(1 << (x)), "unknown")) continue; @@ -578,13 +584,14 @@ static char *handle_cli_core_show_translation(struct ast_cli_entry *e, int cmd, continue; if (y >= 0) curlen = strlen(ast_getformatname(1 << (y))); + if (y >= 0 && magnitude[y] + 1 > curlen) { + curlen = magnitude[y] + 1; + } if (curlen < 5) curlen = 5; if (x >= 0 && y >= 0 && tr_matrix[x][y].step) { - /* XXX 99999 is a little hackish - We don't want this number being larger than the shortest (or current) codec - For now, that is "gsm" */ - ast_str_append(&out, -1, "%*d", curlen + 1, tr_matrix[x][y].cost > 99999 ? 0 : tr_matrix[x][y].cost); + /* Actual codec output */ + ast_str_append(&out, -1, "%*d", curlen + 1, tr_matrix[x][y].cost); } else if (x == -1 && y >= 0) { /* Top row - use a dynamic size */ ast_str_append(&out, -1, "%*s", curlen + 1, ast_getformatname(1 << (y)) ); @@ -592,13 +599,15 @@ static char *handle_cli_core_show_translation(struct ast_cli_entry *e, int cmd, /* Left column - use a static size. */ ast_str_append(&out, -1, "%*s", longest, ast_getformatname(1 << (x)) ); } else if (x >= 0 && y >= 0) { + /* Codec not supported */ ast_str_append(&out, -1, "%*s", curlen + 1, "-"); } else { + /* Upper left hand corner */ ast_str_append(&out, -1, "%*s", longest, ""); } } ast_str_append(&out, -1, "\n"); - ast_cli(a->fd, "%s", out->str); + ast_cli(a->fd, "%s", ast_str_buffer(out)); } AST_RWLIST_UNLOCK(&translators); return CLI_SUCCESS; |