1 //===- raw_ostream.cpp ----------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #include "mcld/Config/Config.h" 10 #include "mcld/Support/raw_ostream.h" 11 12 #if defined(HAVE_UNISTD_H) 13 #include <unistd.h> 14 #endif 15 16 #if defined(__CYGWIN__) || defined(_MSC_VER) || defined(__MINGW32__) 17 #include <io.h> 18 #endif 19 20 #if defined(_MSC_VER) || defined(__MINGW32__) 21 #ifndef STDIN_FILENO 22 #define STDIN_FILENO 0 23 #endif 24 #ifndef STDOUT_FILENO 25 #define STDOUT_FILENO 1 26 #endif 27 #ifndef STDERR_FILENO 28 #define STDERR_FILENO 2 29 #endif 30 #endif 31 32 namespace mcld { 33 34 //===----------------------------------------------------------------------===// 35 // raw_ostream 36 //===----------------------------------------------------------------------===// 37 raw_fd_ostream::raw_fd_ostream(const char* pFilename, 38 std::error_code& pErrorCode, 39 llvm::sys::fs::OpenFlags pFlags) 40 : llvm::raw_fd_ostream(pFilename, pErrorCode, pFlags), 41 m_bConfigColor(false), 42 m_bSetColor(false) { 43 } 44 45 raw_fd_ostream::raw_fd_ostream(int pFD, 46 bool pShouldClose, 47 bool pUnbuffered) 48 : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered), 49 m_bConfigColor(false), 50 m_bSetColor(false) { 51 } 52 53 raw_fd_ostream::~raw_fd_ostream() { 54 } 55 56 void raw_fd_ostream::setColor(bool pEnable) { 57 m_bConfigColor = true; 58 m_bSetColor = pEnable; 59 } 60 61 llvm::raw_ostream& raw_fd_ostream::changeColor( 62 enum llvm::raw_ostream::Colors pColor, 63 bool pBold, 64 bool pBackground) { 65 if (!is_displayed()) 66 return *this; 67 return llvm::raw_fd_ostream::changeColor(pColor, pBold, pBackground); 68 } 69 70 llvm::raw_ostream& raw_fd_ostream::resetColor() { 71 if (!is_displayed()) 72 return *this; 73 return llvm::raw_fd_ostream::resetColor(); 74 } 75 76 llvm::raw_ostream& raw_fd_ostream::reverseColor() { 77 if (!is_displayed()) 78 return *this; 79 return llvm::raw_ostream::reverseColor(); 80 } 81 82 bool raw_fd_ostream::is_displayed() const { 83 if (m_bConfigColor) 84 return m_bSetColor; 85 86 return llvm::raw_fd_ostream::is_displayed(); 87 } 88 89 //===----------------------------------------------------------------------===// 90 // outs(), errs(), nulls() 91 //===----------------------------------------------------------------------===// 92 raw_fd_ostream& outs() { 93 // Set buffer settings to model stdout behavior. 94 static raw_fd_ostream S(STDOUT_FILENO, false); 95 return S; 96 } 97 98 raw_fd_ostream& errs() { 99 // Set standard error to be unbuffered by default. 100 static raw_fd_ostream S(STDERR_FILENO, false, true); 101 return S; 102 } 103 104 } // namespace mcld 105