| // Copyright 2017 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef _BSDIFF_LOGGING_H_ |
| #define _BSDIFF_LOGGING_H_ |
| |
| #include <string.h> |
| |
| #include <iostream> |
| #include <sstream> |
| |
| // Simple error logging macro to avoid dependencies in other base libraries. |
| #define LOG(severity) LogMessage(__FILE__, __LINE__, #severity).stream() |
| |
| // A variant of LOG that also logs the current errno value. |
| #define PLOG(severity) LogMessage(__FILE__, __LINE__, #severity, errno).stream() |
| |
| // A temporarily scoped object used by LOG & PLOG. |
| class LogMessage { |
| public: |
| LogMessage(const char* file, unsigned int line, const char* severity); |
| |
| LogMessage(const char* file, |
| unsigned int line, |
| const char* severity, |
| int error); |
| |
| ~LogMessage(); |
| |
| // Returns the stream associated with the message, the LogMessage performs |
| // output when it goes out of scope. |
| std::ostream& stream() { return stream_; } |
| |
| private: |
| std::ostringstream stream_; |
| int error_; // The saved errno value. |
| }; |
| |
| #endif // _BSDIFF_LOGGING_H_ |