| Index: base/logging.cc
|
| diff --git a/base/logging.cc b/base/logging.cc
|
| index af513befb59c08c9dc7c2e95a904d7dfe567967e..706dbb1df44fefc6c5d3a4e7de6f71a698aec482 100644
|
| --- a/base/logging.cc
|
| +++ b/base/logging.cc
|
| @@ -5,9 +5,14 @@
|
| #include "base/logging.h"
|
|
|
| #if defined(OS_WIN)
|
| +#include <io.h>
|
| #include <windows.h>
|
| typedef HANDLE FileHandle;
|
| typedef HANDLE MutexHandle;
|
| +// Windows warns on using write(). It prefers _write().
|
| +#define write(fd, buf, count) _write(fd, buf, static_cast<unsigned int>(count))
|
| +// Windows doesn't define STDERR_FILENO. Define it here.
|
| +#define STDERR_FILENO 2
|
| #elif defined(OS_MACOSX)
|
| #include <CoreFoundation/CoreFoundation.h>
|
| #include <mach/mach.h>
|
| @@ -37,6 +42,7 @@ typedef pthread_mutex_t* MutexHandle;
|
| #include "base/base_switches.h"
|
| #include "base/command_line.h"
|
| #include "base/debug_util.h"
|
| +#include "base/eintr_wrapper.h"
|
| #include "base/lock_impl.h"
|
| #if defined(OS_POSIX)
|
| #include "base/safe_strerror_posix.h"
|
| @@ -684,6 +690,37 @@ void CloseLogFile() {
|
| log_file = NULL;
|
| }
|
|
|
| +void RawLog(int level, const char* message) {
|
| + if (level >= min_log_level) {
|
| + size_t bytes_written = 0;
|
| + const size_t message_len = strlen(message);
|
| + int rv;
|
| + while (bytes_written < message_len) {
|
| + rv = HANDLE_EINTR(
|
| + write(STDERR_FILENO, message + bytes_written,
|
| + message_len - bytes_written));
|
| + if (rv < 0) {
|
| + // Give up, nothing we can do now.
|
| + break;
|
| + }
|
| + bytes_written += rv;
|
| + }
|
| +
|
| + if (message_len > 0 && message[message_len - 1] != '\n') {
|
| + do {
|
| + rv = HANDLE_EINTR(write(STDERR_FILENO, "\n", 1));
|
| + if (rv < 0) {
|
| + // Give up, nothing we can do now.
|
| + break;
|
| + }
|
| + } while (rv != 1);
|
| + }
|
| + }
|
| +
|
| + if (level == LOG_FATAL)
|
| + DebugUtil::BreakDebugger();
|
| +}
|
| +
|
| } // namespace logging
|
|
|
| std::ostream& operator<<(std::ostream& out, const wchar_t* wstr) {
|
|
|