| // 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_ |