From dd631eb72879ca97d6285148f1cf735d20d02ebe Mon Sep 17 00:00:00 2001 From: Lucian Grijincu Date: Thu, 15 Oct 2015 20:04:34 -0700 Subject: [PATCH] folly: Symbolizer: don't colorize TERM="dumb" or TERM="" or TERM-undefined TTYs Reviewed By: @dcolascione Differential Revision: D2548486 fb-gh-sync-id: 6e2d7e84598eb5b05aba7a262b7c53532337dbe3 --- folly/experimental/symbolizer/Symbolizer.cpp | 21 ++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/folly/experimental/symbolizer/Symbolizer.cpp b/folly/experimental/symbolizer/Symbolizer.cpp index cc98c124..41627761 100644 --- a/folly/experimental/symbolizer/Symbolizer.cpp +++ b/folly/experimental/symbolizer/Symbolizer.cpp @@ -16,9 +16,10 @@ #include -#include #include +#include #include +#include #ifdef __GNUC__ #include @@ -417,16 +418,20 @@ int getFD(const std::ios& stream) { return -1; } -bool isTty(int options, int fd) { - return ((options & SymbolizePrinter::TERSE) == 0 && - (options & SymbolizePrinter::COLOR_IF_TTY) != 0 && - fd >= 0 && ::isatty(fd)); +bool isColorfulTty(int options, int fd) { + if ((options & SymbolizePrinter::TERSE) != 0 || + (options & SymbolizePrinter::COLOR_IF_TTY) == 0 || + fd < 0 || !::isatty(fd)) { + return false; + } + auto term = ::getenv("TERM"); + return !(term == nullptr || term[0] == '\0' || strcmp(term, "dumb") == 0); } } // anonymous namespace OStreamSymbolizePrinter::OStreamSymbolizePrinter(std::ostream& out, int options) - : SymbolizePrinter(options, isTty(options, getFD(out))), + : SymbolizePrinter(options, isColorfulTty(options, getFD(out))), out_(out) { } @@ -435,7 +440,7 @@ void OStreamSymbolizePrinter::doPrint(StringPiece sp) { } FDSymbolizePrinter::FDSymbolizePrinter(int fd, int options, size_t bufferSize) - : SymbolizePrinter(options, isTty(options, fd)), + : SymbolizePrinter(options, isColorfulTty(options, fd)), fd_(fd), buffer_(bufferSize ? IOBuf::create(bufferSize) : nullptr) { } @@ -466,7 +471,7 @@ void FDSymbolizePrinter::flush() { } FILESymbolizePrinter::FILESymbolizePrinter(FILE* file, int options) - : SymbolizePrinter(options, isTty(options, fileno(file))), + : SymbolizePrinter(options, isColorfulTty(options, fileno(file))), file_(file) { } -- 2.34.1