• 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/Support/raw_ostream.h>
10 
11 using namespace mcld;
12 
13 //===----------------------------------------------------------------------===//
14 // raw_ostream
raw_fd_ostream(const char * pFilename,std::string & pErrorInfo,unsigned int pFlags,const MCLDInfo * pLDInfo)15 mcld::raw_fd_ostream::raw_fd_ostream(const char *pFilename,
16                                std::string &pErrorInfo,
17                                unsigned int pFlags,
18                                const MCLDInfo* pLDInfo)
19   : llvm::raw_fd_ostream(pFilename, pErrorInfo, pFlags), m_pLDInfo(pLDInfo) {
20 }
21 
raw_fd_ostream(int pFD,bool pShouldClose,bool pUnbuffered,const MCLDInfo * pLDInfo)22 mcld::raw_fd_ostream::raw_fd_ostream(int pFD,
23                                bool pShouldClose,
24                                bool pUnbuffered,
25                                const MCLDInfo* pLDInfo)
26   : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered), m_pLDInfo(pLDInfo) {
27 }
28 
~raw_fd_ostream()29 mcld::raw_fd_ostream::~raw_fd_ostream()
30 {
31 }
32 
setLDInfo(const MCLDInfo & pLDInfo)33 void mcld::raw_fd_ostream::setLDInfo(const MCLDInfo& pLDInfo)
34 {
35   m_pLDInfo = &pLDInfo;
36 }
37 
38 llvm::raw_ostream &
changeColor(enum llvm::raw_ostream::Colors pColor,bool pBold,bool pBackground)39 mcld::raw_fd_ostream::changeColor(enum llvm::raw_ostream::Colors pColor,
40                                   bool pBold,
41                                   bool pBackground)
42 {
43   if (!is_displayed())
44     return *this;
45   return llvm::raw_fd_ostream::changeColor(pColor, pBold, pBackground);
46 }
47 
resetColor()48 llvm::raw_ostream& mcld::raw_fd_ostream::resetColor()
49 {
50   if (!is_displayed())
51     return *this;
52   return llvm::raw_fd_ostream::resetColor();
53 }
54 
55 // FIXME: migrate to newer LLVM
56 /**
57 llvm::raw_ostream& mcld::raw_fd_ostream::reverseColor()
58 {
59   if (!is_displayed())
60     return *this;
61   return llvm::raw_ostream::reverseColor();
62 }
63 **/
64 
is_displayed() const65 bool mcld::raw_fd_ostream::is_displayed() const
66 {
67   if (NULL == m_pLDInfo)
68     return llvm::raw_fd_ostream::is_displayed();
69 
70   return m_pLDInfo->options().color();
71 }
72 
73 //===----------------------------------------------------------------------===//
74 //  outs(), errs(), nulls()
75 //===----------------------------------------------------------------------===//
outs()76 mcld::raw_fd_ostream& mcld::outs() {
77   // Set buffer settings to model stdout behavior.
78   // Delete the file descriptor when the program exists, forcing error
79   // detection. If you don't want this behavior, don't use outs().
80   static mcld::raw_fd_ostream S(STDOUT_FILENO, true, NULL);
81   return S;
82 }
83 
errs()84 mcld::raw_fd_ostream& mcld::errs() {
85   // Set standard error to be unbuffered by default.
86   static mcld::raw_fd_ostream S(STDERR_FILENO, false, true, NULL);
87   return S;
88 }
89 
InitializeOStreams(const MCLDInfo & pLDInfo)90 void mcld::InitializeOStreams(const MCLDInfo& pLDInfo)
91 {
92   outs().setLDInfo(pLDInfo);
93   errs().setLDInfo(pLDInfo);
94 }
95 
96