Index: third_party/re2/util/logging.h |
diff --git a/third_party/re2/util/logging.h b/third_party/re2/util/logging.h |
index d0a2d875b6e02e4ecfec5ad690e467ced67116f3..feac1993fda4e138b65d62a27c98dac1bf974596 100644 |
--- a/third_party/re2/util/logging.h |
+++ b/third_party/re2/util/logging.h |
@@ -7,13 +7,13 @@ |
#ifndef RE2_UTIL_LOGGING_H__ |
#define RE2_UTIL_LOGGING_H__ |
-#ifndef WIN32 |
-#include <unistd.h> /* for write */ |
-#endif |
+#include <stdio.h> /* for fwrite */ |
#include <sstream> |
-#ifdef WIN32 |
-#include <io.h> |
-#endif |
+ |
+#include "util/util.h" |
+#include "util/flags.h" |
+ |
+DECLARE_int32(minloglevel); |
// Debug-only checking. |
#define DCHECK(condition) assert(condition) |
@@ -33,13 +33,16 @@ |
#define CHECK_EQ(x, y) CHECK((x) == (y)) |
#define CHECK_NE(x, y) CHECK((x) != (y)) |
-#define LOG_INFO LogMessage(__FILE__, __LINE__) |
-#define LOG_ERROR LOG_INFO |
-#define LOG_WARNING LOG_INFO |
+#define LOG_INFO LogMessage(__FILE__, __LINE__, 0) |
+#define LOG_WARNING LogMessage(__FILE__, __LINE__, 1) |
+#define LOG_ERROR LogMessage(__FILE__, __LINE__, 2) |
#define LOG_FATAL LogMessageFatal(__FILE__, __LINE__) |
#define LOG_QFATAL LOG_FATAL |
-#define VLOG(x) if((x)>0){}else LOG_INFO.stream() |
+// It seems that one of the Windows header files defines ERROR as 0. |
+#ifdef _WIN32 |
+#define LOG_0 LOG_INFO |
+#endif |
#ifdef NDEBUG |
#define DEBUG_MODE 0 |
@@ -51,16 +54,21 @@ |
#define LOG(severity) LOG_ ## severity.stream() |
+#define VLOG(x) if((x)>0){}else LOG_INFO.stream() |
+ |
class LogMessage { |
public: |
- LogMessage(const char* file, int line) : flushed_(false) { |
+ LogMessage(const char* file, int line, int severity) |
+ : severity_(severity), flushed_(false) { |
stream() << file << ":" << line << ": "; |
} |
void Flush() { |
stream() << "\n"; |
- string s = str_.str(); |
- int n = (int)s.size(); // shut up msvc |
- if(write(2, s.data(), n) < 0) {} // shut up gcc |
+ if (severity_ >= re2::FLAGS_minloglevel) { |
+ string s = str_.str(); |
+ size_t n = s.size(); |
+ if (fwrite(s.data(), 1, n, stderr) < n) {} // shut up gcc |
+ } |
flushed_ = true; |
} |
~LogMessage() { |
@@ -69,23 +77,33 @@ class LogMessage { |
} |
} |
ostream& stream() { return str_; } |
- |
+ |
private: |
+ const int severity_; |
bool flushed_; |
std::ostringstream str_; |
- DISALLOW_EVIL_CONSTRUCTORS(LogMessage); |
+ DISALLOW_COPY_AND_ASSIGN(LogMessage); |
}; |
+#ifdef _WIN32 |
+#pragma warning(push) |
+#pragma warning(disable: 4722) // destructor never returns |
+#endif |
+ |
class LogMessageFatal : public LogMessage { |
public: |
LogMessageFatal(const char* file, int line) |
- : LogMessage(file, line) { } |
+ : LogMessage(file, line, 3) {} |
~LogMessageFatal() { |
Flush(); |
abort(); |
} |
private: |
- DISALLOW_EVIL_CONSTRUCTORS(LogMessageFatal); |
+ DISALLOW_COPY_AND_ASSIGN(LogMessageFatal); |
}; |
+#ifdef _WIN32 |
+#pragma warning(pop) |
+#endif |
+ |
#endif // RE2_UTIL_LOGGING_H__ |