raw_ostream.cpp revision 37b74a387bb3993387029859c2d9d051c41c724e
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
32namespace mcld {
33
34//===----------------------------------------------------------------------===//
35// raw_ostream
36//===----------------------------------------------------------------------===//
37raw_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
45raw_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
53raw_fd_ostream::~raw_fd_ostream() {
54}
55
56void raw_fd_ostream::setColor(bool pEnable) {
57  m_bConfigColor = true;
58  m_bSetColor = pEnable;
59}
60
61llvm::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
70llvm::raw_ostream& raw_fd_ostream::resetColor() {
71  if (!is_displayed())
72    return *this;
73  return llvm::raw_fd_ostream::resetColor();
74}
75
76llvm::raw_ostream& raw_fd_ostream::reverseColor() {
77  if (!is_displayed())
78    return *this;
79  return llvm::raw_ostream::reverseColor();
80}
81
82bool 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//===----------------------------------------------------------------------===//
92raw_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
98raw_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