//===- 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__) #include <io.h> #endif #if defined(_MSC_VER) || defined(__MINGW32__) #include <io.h> #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 using namespace mcld; //===----------------------------------------------------------------------===// // raw_ostream //===----------------------------------------------------------------------===// mcld::raw_fd_ostream::raw_fd_ostream(const char *pFilename, std::string &pErrorInfo, llvm::sys::fs::OpenFlags pFlags) : llvm::raw_fd_ostream(pFilename, pErrorInfo, pFlags), m_bConfigColor(false), m_bSetColor(false) { } mcld::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) { } mcld::raw_fd_ostream::~raw_fd_ostream() { } void mcld::raw_fd_ostream::setColor(bool pEnable) { m_bConfigColor = true; m_bSetColor = pEnable; } llvm::raw_ostream & mcld::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& mcld::raw_fd_ostream::resetColor() { if (!is_displayed()) return *this; return llvm::raw_fd_ostream::resetColor(); } llvm::raw_ostream& mcld::raw_fd_ostream::reverseColor() { if (!is_displayed()) return *this; return llvm::raw_ostream::reverseColor(); } bool mcld::raw_fd_ostream::is_displayed() const { if (m_bConfigColor) return m_bSetColor; return llvm::raw_fd_ostream::is_displayed(); } //===----------------------------------------------------------------------===// // outs(), errs(), nulls() //===----------------------------------------------------------------------===// mcld::raw_fd_ostream& mcld::outs() { // Set buffer settings to model stdout behavior. static mcld::raw_fd_ostream S(STDOUT_FILENO, false); return S; } mcld::raw_fd_ostream& mcld::errs() { // Set standard error to be unbuffered by default. static mcld::raw_fd_ostream S(STDERR_FILENO, false, true); return S; }