[tip:perfcounters/core] perf_counter tools: Dont output in color on !tty

tip-bot for Ingo Molnar
2009-06-04T14:52:31Z

Commit-ID: 13d0ab5ec29852a6925f612830fa9e822669ece6
Gitweb: http://git.kernel.org/tip/13d0ab5ec29852a6925f612830fa9e822669ece6
Author: Ingo Molnar <mingo@elte.hu>
AuthorDate: Thu, 4 Jun 2009 15:40:25 +0200
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Thu, 4 Jun 2009 15:40:25 +0200

perf_counter tools: Dont output in color on !tty

Dont emit ASCII color characters if the terminal is not a tty,
such as when perf report gets redirected into a file.

Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

---
Documentation/perf_counter/util/color.c | 17 ++++++++++++++---
1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Documentation/perf_counter/util/color.c b/Documentation/perf_counter/util/color.c
index a77975d..9a8c20c 100644
--- a/Documentation/perf_counter/util/color.c
+++ b/Documentation/perf_counter/util/color.c
@@ -1,7 +1,7 @@
#include "cache.h"
#include "color.h"

-int perf_use_color_default = 0;
+int perf_use_color_default = -1;

static int parse_color(const char *name, int len)
{
@@ -169,10 +169,20 @@ static int color_vfprintf(FILE *fp, const char *color, const char *fmt,
{
int r = 0;

- if (*color)
+ /*
+ * Auto-detect:
+ */
+ if (perf_use_color_default < 0) {
+ if (isatty(1) || pager_in_use())
+ perf_use_color_default = 1;
+ else
+ perf_use_color_default = 0;
+ }
+
+ if (perf_use_color_default && *color)
r += fprintf(fp, "%s", color);
r += vfprintf(fp, fmt, args);
- if (*color)
+ if (perf_use_color_default && *color)
r += fprintf(fp, "%s", PERF_COLOR_RESET);
if (trail)
r += fprintf(fp, "%s", trail);
@@ -185,6 +195,7 @@ int color_fprintf(FILE *fp, const char *color, const char *fmt, ...)
{
va_list args;
int r;
+
va_start(args, fmt);
r = color_vfprintf(fp, color, fmt, args, NULL);
va_end(args);