/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // This is a stripped down version of the Chromium source file base/logging.cc // This prevents dependency on the Chromium logging and dependency creep in // general. // At some point we should find a way to hook this into our own logging see // bug 1013988. // The formatting in this file matches the original Chromium file to aid future // merging. #include "base/logging.h" #if defined(OS_WIN) #include #endif #if defined(OS_POSIX) #include #endif #if defined(OS_WIN) #include "base/strings/utf_string_conversions.h" #endif #include #include "mozilla/Assertions.h" #include "mozilla/Unused.h" namespace logging { namespace { int g_min_log_level = 0; LoggingDestination g_logging_destination = LOG_DEFAULT; // For LOG_ERROR and above, always print to stderr. const int kAlwaysPrintErrorLevel = LOG_ERROR; // A log message handler that gets notified of every log message we process. LogMessageHandlerFunction log_message_handler = nullptr; } // namespace // This is never instantiated, it's just used for EAT_STREAM_PARAMETERS to have // an object of the correct type on the LHS of the unused part of the ternary // operator. std::ostream* g_swallow_stream; void SetMinLogLevel(int level) { g_min_log_level = std::min(LOG_FATAL, level); } int GetMinLogLevel() { return g_min_log_level; } bool ShouldCreateLogMessage(int severity) { if (severity < g_min_log_level) return false; // Return true here unless we know ~LogMessage won't do anything. Note that // ~LogMessage writes to stderr if severity_ >= kAlwaysPrintErrorLevel, even // when g_logging_destination is LOG_NONE. return g_logging_destination != LOG_NONE || log_message_handler || severity >= kAlwaysPrintErrorLevel; } int GetVlogLevelHelper(const char* file, size_t N) { return 0; } // Explicit instantiations for commonly used comparisons. template std::string* MakeCheckOpString( const int&, const int&, const char* names); template std::string* MakeCheckOpString( const unsigned long&, const unsigned long&, const char* names); template std::string* MakeCheckOpString( const unsigned long&, const unsigned int&, const char* names); template std::string* MakeCheckOpString( const unsigned int&, const unsigned long&, const char* names); template std::string* MakeCheckOpString( const std::string&, const std::string&, const char* name); LogMessage::LogMessage(const char* file, int line, LogSeverity severity) : severity_(severity), file_(file), line_(line) { } LogMessage::LogMessage(const char* file, int line, const char* condition) : severity_(LOG_FATAL), file_(file), line_(line) { } LogMessage::LogMessage(const char* file, int line, std::string* result) : severity_(LOG_FATAL), file_(file), line_(line) { delete result; } LogMessage::LogMessage(const char* file, int line, LogSeverity severity, std::string* result) : severity_(severity), file_(file), line_(line) { delete result; } LogMessage::~LogMessage() { if (severity_ == LOG_FATAL) { MOZ_CRASH("Hit fatal chromium sandbox condition."); } } SystemErrorCode GetLastSystemErrorCode() { #if defined(OS_WIN) return ::GetLastError(); #elif defined(OS_POSIX) return errno; #else #error Not implemented #endif } #if defined(OS_WIN) Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file, int line, LogSeverity severity, SystemErrorCode err) : err_(err), log_message_(file, line, severity) { mozilla::Unused << err_; } Win32ErrorLogMessage::~Win32ErrorLogMessage() { } #elif defined(OS_POSIX) ErrnoLogMessage::ErrnoLogMessage(const char* file, int line, LogSeverity severity, SystemErrorCode err) : err_(err), log_message_(file, line, severity) { mozilla::Unused << err_; } ErrnoLogMessage::~ErrnoLogMessage() { } #endif // OS_WIN void RawLog(int level, const char* message) { } } // namespace logging #if defined(OS_WIN) std::ostream& std::operator<<(std::ostream& out, const wchar_t* wstr) { return out << base::WideToUTF8(std::wstring(wstr)); } #endif