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 @@
#include <folly/experimental/symbolizer/Symbolizer.h>
#include <limits.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <limits.h>
#ifdef __GNUC__
#include <ext/stdio_filebuf.h>
......@@ -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) {
}
......
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