1// Copyright 2017 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef _BSDIFF_LOGGING_H_ 6#define _BSDIFF_LOGGING_H_ 7 8#include <string.h> 9 10#include <iostream> 11#include <sstream> 12 13// Simple error logging macro to avoid dependencies in other base libraries. 14#define LOG(severity) LogMessage(__FILE__, __LINE__, #severity).stream() 15 16// A variant of LOG that also logs the current errno value. 17#define PLOG(severity) LogMessage(__FILE__, __LINE__, #severity, errno).stream() 18 19// A temporarily scoped object used by LOG & PLOG. 20class LogMessage { 21 public: 22 LogMessage(const char* file, unsigned int line, const char* severity); 23 24 LogMessage(const char* file, 25 unsigned int line, 26 const char* severity, 27 int error); 28 29 ~LogMessage(); 30 31 // Returns the stream associated with the message, the LogMessage performs 32 // output when it goes out of scope. 33 std::ostream& stream() { return stream_; } 34 35 private: 36 std::ostringstream stream_; 37 int error_; // The saved errno value. 38}; 39 40#endif // _BSDIFF_LOGGING_H_ 41