You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.7 KiB
105 lines
2.7 KiB
//===- raw_ostream.cpp ----------------------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include "mcld/Config/Config.h"
|
|
#include "mcld/Support/raw_ostream.h"
|
|
|
|
#if defined(HAVE_UNISTD_H)
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
#if defined(__CYGWIN__) || defined(_MSC_VER) || defined(__MINGW32__)
|
|
#include <io.h>
|
|
#endif
|
|
|
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
|
#ifndef STDIN_FILENO
|
|
#define STDIN_FILENO 0
|
|
#endif
|
|
#ifndef STDOUT_FILENO
|
|
#define STDOUT_FILENO 1
|
|
#endif
|
|
#ifndef STDERR_FILENO
|
|
#define STDERR_FILENO 2
|
|
#endif
|
|
#endif
|
|
|
|
namespace mcld {
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// raw_ostream
|
|
//===----------------------------------------------------------------------===//
|
|
raw_fd_ostream::raw_fd_ostream(const char* pFilename,
|
|
std::error_code& pErrorCode,
|
|
llvm::sys::fs::OpenFlags pFlags)
|
|
: llvm::raw_fd_ostream(pFilename, pErrorCode, pFlags),
|
|
m_bConfigColor(false),
|
|
m_bSetColor(false) {
|
|
}
|
|
|
|
raw_fd_ostream::raw_fd_ostream(int pFD,
|
|
bool pShouldClose,
|
|
bool pUnbuffered)
|
|
: llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered),
|
|
m_bConfigColor(false),
|
|
m_bSetColor(false) {
|
|
}
|
|
|
|
raw_fd_ostream::~raw_fd_ostream() {
|
|
}
|
|
|
|
void raw_fd_ostream::setColor(bool pEnable) {
|
|
m_bConfigColor = true;
|
|
m_bSetColor = pEnable;
|
|
}
|
|
|
|
llvm::raw_ostream& raw_fd_ostream::changeColor(
|
|
enum llvm::raw_ostream::Colors pColor,
|
|
bool pBold,
|
|
bool pBackground) {
|
|
if (!is_displayed())
|
|
return *this;
|
|
return llvm::raw_fd_ostream::changeColor(pColor, pBold, pBackground);
|
|
}
|
|
|
|
llvm::raw_ostream& raw_fd_ostream::resetColor() {
|
|
if (!is_displayed())
|
|
return *this;
|
|
return llvm::raw_fd_ostream::resetColor();
|
|
}
|
|
|
|
llvm::raw_ostream& raw_fd_ostream::reverseColor() {
|
|
if (!is_displayed())
|
|
return *this;
|
|
return llvm::raw_ostream::reverseColor();
|
|
}
|
|
|
|
bool raw_fd_ostream::is_displayed() const {
|
|
if (m_bConfigColor)
|
|
return m_bSetColor;
|
|
|
|
return llvm::raw_fd_ostream::is_displayed();
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// outs(), errs(), nulls()
|
|
//===----------------------------------------------------------------------===//
|
|
raw_fd_ostream& outs() {
|
|
// Set buffer settings to model stdout behavior.
|
|
static raw_fd_ostream S(STDOUT_FILENO, false);
|
|
return S;
|
|
}
|
|
|
|
raw_fd_ostream& errs() {
|
|
// Set standard error to be unbuffered by default.
|
|
static raw_fd_ostream S(STDERR_FILENO, false, true);
|
|
return S;
|
|
}
|
|
|
|
} // namespace mcld
|