105 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- 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/Config/Config.h"
 | 
						|
#include "mcld/Support/raw_ostream.h"
 | 
						|
 | 
						|
#if defined(HAVE_UNISTD_H)
 | 
						|
#include <unistd.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#if defined(__CYGWIN__) || defined(_MSC_VER) || defined(__MINGW32__)
 | 
						|
#include <io.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#if defined(_MSC_VER) || defined(__MINGW32__)
 | 
						|
#ifndef STDIN_FILENO
 | 
						|
#define STDIN_FILENO 0
 | 
						|
#endif
 | 
						|
#ifndef STDOUT_FILENO
 | 
						|
#define STDOUT_FILENO 1
 | 
						|
#endif
 | 
						|
#ifndef STDERR_FILENO
 | 
						|
#define STDERR_FILENO 2
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
namespace mcld {
 | 
						|
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
// raw_ostream
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
raw_fd_ostream::raw_fd_ostream(const char* pFilename,
 | 
						|
                               std::error_code& pErrorCode,
 | 
						|
                               llvm::sys::fs::OpenFlags pFlags)
 | 
						|
    : llvm::raw_fd_ostream(pFilename, pErrorCode, pFlags),
 | 
						|
      m_bConfigColor(false),
 | 
						|
      m_bSetColor(false) {
 | 
						|
}
 | 
						|
 | 
						|
raw_fd_ostream::raw_fd_ostream(int pFD,
 | 
						|
                               bool pShouldClose,
 | 
						|
                               bool pUnbuffered)
 | 
						|
    : llvm::raw_fd_ostream(pFD, pShouldClose, pUnbuffered),
 | 
						|
      m_bConfigColor(false),
 | 
						|
      m_bSetColor(false) {
 | 
						|
}
 | 
						|
 | 
						|
raw_fd_ostream::~raw_fd_ostream() {
 | 
						|
}
 | 
						|
 | 
						|
void raw_fd_ostream::setColor(bool pEnable) {
 | 
						|
  m_bConfigColor = true;
 | 
						|
  m_bSetColor = pEnable;
 | 
						|
}
 | 
						|
 | 
						|
llvm::raw_ostream& 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& raw_fd_ostream::resetColor() {
 | 
						|
  if (!is_displayed())
 | 
						|
    return *this;
 | 
						|
  return llvm::raw_fd_ostream::resetColor();
 | 
						|
}
 | 
						|
 | 
						|
llvm::raw_ostream& raw_fd_ostream::reverseColor() {
 | 
						|
  if (!is_displayed())
 | 
						|
    return *this;
 | 
						|
  return llvm::raw_ostream::reverseColor();
 | 
						|
}
 | 
						|
 | 
						|
bool raw_fd_ostream::is_displayed() const {
 | 
						|
  if (m_bConfigColor)
 | 
						|
    return m_bSetColor;
 | 
						|
 | 
						|
  return llvm::raw_fd_ostream::is_displayed();
 | 
						|
}
 | 
						|
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//  outs(), errs(), nulls()
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
raw_fd_ostream& outs() {
 | 
						|
  // Set buffer settings to model stdout behavior.
 | 
						|
  static raw_fd_ostream S(STDOUT_FILENO, false);
 | 
						|
  return S;
 | 
						|
}
 | 
						|
 | 
						|
raw_fd_ostream& errs() {
 | 
						|
  // Set standard error to be unbuffered by default.
 | 
						|
  static raw_fd_ostream S(STDERR_FILENO, false, true);
 | 
						|
  return S;
 | 
						|
}
 | 
						|
 | 
						|
}  // namespace mcld
 |