//===- 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 #endif #if defined(__CYGWIN__) || defined(_MSC_VER) || defined(__MINGW32__) #include #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