safe terminal output is sweet.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@47491 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Matt O'Gorman 19 years ago
parent 69d3416c12
commit b025702287

@ -59,6 +59,8 @@ char *term_color_code(char *outbuf, int fgcolor, int bgcolor, int maxout);
char *term_strip(char *outbuf, char *inbuf, int maxout);
void term_filter_escapes(char *line);
char *term_prompt(char *outbuf, const char *inbuf, int maxout);
char *term_prep(void);

@ -716,8 +716,10 @@ void ast_log(int level, const char *file, int line, const char *function, const
va_start(ap, fmt);
res = ast_dynamic_str_thread_set_va(&buf, BUFSIZ, &log_buf, fmt, ap);
va_end(ap);
if (res != AST_DYNSTR_BUILD_FAILED)
if (res != AST_DYNSTR_BUILD_FAILED) {
term_filter_escapes(buf->str);
fputs(buf->str, stdout);
}
}
return;
}
@ -781,7 +783,8 @@ void ast_log(int level, const char *file, int line, const char *function, const
term_color(tmp2, file, COLOR_BRWHITE, 0, sizeof(tmp2)),
term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)),
term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4)));
/*filter to the console!*/
term_filter_escapes(buf->str);
ast_console_puts_mutable(buf->str);
va_start(ap, fmt);
@ -892,6 +895,9 @@ void ast_verbose(const char *fmt, ...)
if (res == AST_DYNSTR_BUILD_FAILED)
return;
/* filter out possibly hazardous escape sequences */
term_filter_escapes(buf->str);
AST_LIST_LOCK(&verbosers);
AST_LIST_TRAVERSE(&verbosers, v, list)

@ -264,6 +264,34 @@ char *term_prompt(char *outbuf, const char *inbuf, int maxout)
return outbuf;
}
/* filter escape sequences */
void term_filter_escapes(char *line)
{
int i;
for (i=0; i < strlen(line); i++) {
if (line[i] == ESC) {
if (line[i+1] == '\x5b') {
switch (line[i+2]) {
case '\x30':
break;
case '\x31':
break;
case '\x33':
break;
default:
/* replace ESC with a space */
line[i] = ' ';
}
} else {
/* replace ESC with a space */
line[i] = ' ';
}
}
}
}
char *term_prep(void)
{
return prepdata;

Loading…
Cancel
Save