Commit dd631eb7 authored by Lucian Grijincu's avatar Lucian Grijincu Committed by facebook-github-bot-4

folly: Symbolizer: don't colorize TERM="dumb" or TERM="" or TERM-undefined TTYs

Reviewed By: @dcolascione

Differential Revision: D2548486

fb-gh-sync-id: 6e2d7e84598eb5b05aba7a262b7c53532337dbe3
parent 2f57c3a9
...@@ -16,9 +16,10 @@ ...@@ -16,9 +16,10 @@
#include <folly/experimental/symbolizer/Symbolizer.h> #include <folly/experimental/symbolizer/Symbolizer.h>
#include <limits.h>
#include <cstdio> #include <cstdio>
#include <cstdlib>
#include <iostream> #include <iostream>
#include <limits.h>
#ifdef __GNUC__ #ifdef __GNUC__
#include <ext/stdio_filebuf.h> #include <ext/stdio_filebuf.h>
...@@ -417,16 +418,20 @@ int getFD(const std::ios& stream) { ...@@ -417,16 +418,20 @@ int getFD(const std::ios& stream) {
return -1; return -1;
} }
bool isTty(int options, int fd) { bool isColorfulTty(int options, int fd) {
return ((options & SymbolizePrinter::TERSE) == 0 && if ((options & SymbolizePrinter::TERSE) != 0 ||
(options & SymbolizePrinter::COLOR_IF_TTY) != 0 && (options & SymbolizePrinter::COLOR_IF_TTY) == 0 ||
fd >= 0 && ::isatty(fd)); fd < 0 || !::isatty(fd)) {
return false;
}
auto term = ::getenv("TERM");
return !(term == nullptr || term[0] == '\0' || strcmp(term, "dumb") == 0);
} }
} // anonymous namespace } // anonymous namespace
OStreamSymbolizePrinter::OStreamSymbolizePrinter(std::ostream& out, int options) OStreamSymbolizePrinter::OStreamSymbolizePrinter(std::ostream& out, int options)
: SymbolizePrinter(options, isTty(options, getFD(out))), : SymbolizePrinter(options, isColorfulTty(options, getFD(out))),
out_(out) { out_(out) {
} }
...@@ -435,7 +440,7 @@ void OStreamSymbolizePrinter::doPrint(StringPiece sp) { ...@@ -435,7 +440,7 @@ void OStreamSymbolizePrinter::doPrint(StringPiece sp) {
} }
FDSymbolizePrinter::FDSymbolizePrinter(int fd, int options, size_t bufferSize) FDSymbolizePrinter::FDSymbolizePrinter(int fd, int options, size_t bufferSize)
: SymbolizePrinter(options, isTty(options, fd)), : SymbolizePrinter(options, isColorfulTty(options, fd)),
fd_(fd), fd_(fd),
buffer_(bufferSize ? IOBuf::create(bufferSize) : nullptr) { buffer_(bufferSize ? IOBuf::create(bufferSize) : nullptr) {
} }
...@@ -466,7 +471,7 @@ void FDSymbolizePrinter::flush() { ...@@ -466,7 +471,7 @@ void FDSymbolizePrinter::flush() {
} }
FILESymbolizePrinter::FILESymbolizePrinter(FILE* file, int options) FILESymbolizePrinter::FILESymbolizePrinter(FILE* file, int options)
: SymbolizePrinter(options, isTty(options, fileno(file))), : SymbolizePrinter(options, isColorfulTty(options, fileno(file))),
file_(file) { file_(file) {
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment