| //===- 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/Support/raw_ostream.h> |
| |
| using namespace mcld; |
| |
| //===----------------------------------------------------------------------===// |
| // raw_ostream |
| mcld::raw_fd_ostream::raw_fd_ostream(const char *pFilename, |
| std::string &pErrorInfo, |
| unsigned int pFlags, |
| const MCLDInfo* pLDInfo) |
| : llvm::raw_fd_ostream(pFilename, pErrorInfo, pFlags), m_pLDInfo(pLDInfo) { |
| } |
| |
| mcld::raw_fd_ostream::raw_fd_ostream(int pFD, |
| bool pShouldClose, |
| bool pUnbuffered, |
| const MCLDInfo* pLDInfo) |
| : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered), m_pLDInfo(pLDInfo) { |
| } |
| |
| mcld::raw_fd_ostream::~raw_fd_ostream() |
| { |
| } |
| |
| void mcld::raw_fd_ostream::setLDInfo(const MCLDInfo& pLDInfo) |
| { |
| m_pLDInfo = &pLDInfo; |
| } |
| |
| 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(); |
| } |
| |
| // FIXME: migrate to newer LLVM |
| /** |
| 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 (NULL == m_pLDInfo) |
| return llvm::raw_fd_ostream::is_displayed(); |
| |
| return m_pLDInfo->options().color(); |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // outs(), errs(), nulls() |
| //===----------------------------------------------------------------------===// |
| mcld::raw_fd_ostream& mcld::outs() { |
| // Set buffer settings to model stdout behavior. |
| // Delete the file descriptor when the program exists, forcing error |
| // detection. If you don't want this behavior, don't use outs(). |
| static mcld::raw_fd_ostream S(STDOUT_FILENO, true, NULL); |
| 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, NULL); |
| return S; |
| } |
| |
| void mcld::InitializeOStreams(const MCLDInfo& pLDInfo) |
| { |
| outs().setLDInfo(pLDInfo); |
| errs().setLDInfo(pLDInfo); |
| } |
| |