• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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(_MSC_VER)
17 #include <io.h>
18 #ifndef STDIN_FILENO
19 # define STDIN_FILENO 0
20 #endif
21 #ifndef STDOUT_FILENO
22 # define STDOUT_FILENO 1
23 #endif
24 #ifndef STDERR_FILENO
25 # define STDERR_FILENO 2
26 #endif
27 #endif
28 
29 using namespace mcld;
30 
31 //===----------------------------------------------------------------------===//
32 // raw_ostream
33 //===----------------------------------------------------------------------===//
raw_fd_ostream(const char * pFilename,std::string & pErrorInfo,unsigned int pFlags)34 mcld::raw_fd_ostream::raw_fd_ostream(const char *pFilename,
35                                      std::string &pErrorInfo,
36                                      unsigned int pFlags)
37   : llvm::raw_fd_ostream(pFilename, pErrorInfo, pFlags),
38     m_bConfigColor(false),
39     m_bSetColor(false) {
40 }
41 
raw_fd_ostream(int pFD,bool pShouldClose,bool pUnbuffered)42 mcld::raw_fd_ostream::raw_fd_ostream(int pFD,
43                                bool pShouldClose,
44                                bool pUnbuffered)
45   : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered),
46     m_bConfigColor(false),
47     m_bSetColor(false) {
48 }
49 
~raw_fd_ostream()50 mcld::raw_fd_ostream::~raw_fd_ostream()
51 {
52 }
53 
setColor(bool pEnable)54 void mcld::raw_fd_ostream::setColor(bool pEnable)
55 {
56   m_bConfigColor = true;
57   m_bSetColor = pEnable;
58 }
59 
60 llvm::raw_ostream &
changeColor(enum llvm::raw_ostream::Colors pColor,bool pBold,bool pBackground)61 mcld::raw_fd_ostream::changeColor(enum llvm::raw_ostream::Colors pColor,
62                                   bool pBold,
63                                   bool pBackground)
64 {
65   if (!is_displayed())
66     return *this;
67   return llvm::raw_fd_ostream::changeColor(pColor, pBold, pBackground);
68 }
69 
resetColor()70 llvm::raw_ostream& mcld::raw_fd_ostream::resetColor()
71 {
72   if (!is_displayed())
73     return *this;
74   return llvm::raw_fd_ostream::resetColor();
75 }
76 
reverseColor()77 llvm::raw_ostream& mcld::raw_fd_ostream::reverseColor()
78 {
79   if (!is_displayed())
80     return *this;
81   return llvm::raw_ostream::reverseColor();
82 }
83 
is_displayed() const84 bool mcld::raw_fd_ostream::is_displayed() const
85 {
86   if (m_bConfigColor)
87     return m_bSetColor;
88 
89   return llvm::raw_fd_ostream::is_displayed();
90 }
91 
92 //===----------------------------------------------------------------------===//
93 //  outs(), errs(), nulls()
94 //===----------------------------------------------------------------------===//
outs()95 mcld::raw_fd_ostream& mcld::outs() {
96   // Set buffer settings to model stdout behavior.
97   // Delete the file descriptor when the program exists, forcing error
98   // detection. If you don't want this behavior, don't use outs().
99   static mcld::raw_fd_ostream S(STDOUT_FILENO, true);
100   return S;
101 }
102 
errs()103 mcld::raw_fd_ostream& mcld::errs() {
104   // Set standard error to be unbuffered by default.
105   static mcld::raw_fd_ostream S(STDERR_FILENO, false, true);
106   return S;
107 }
108 
109