// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/fuchsia/fuchsia_logging.h" #include #include #include #include "base/location.h" #include "base/process/process.h" #include "base/strings/stringprintf.h" namespace logging { ZxLogMessage::ZxLogMessage(const char* file_path, int line, LogSeverity severity, zx_status_t zx_status) : LogMessage(file_path, line, severity), zx_status_(zx_status) {} ZxLogMessage::~ZxLogMessage() { AppendError(); } void ZxLogMessage::AppendError() { // zx_status_t error values are negative, so log the numeric version as // decimal rather than hex. This is also useful to match zircon/errors.h for // grepping. stream() << ": " << zx_status_get_string(zx_status_) << " (" << zx_status_ << ")"; } ZxLogMessageFatal::~ZxLogMessageFatal() { AppendError(); Flush(); base::ImmediateCrash(); } } // namespace logging namespace base { namespace internal { std::string FidlConnectionErrorMessage(std::string_view protocol_name, std::string_view status_string) { return base::StringPrintf("Failed to connect to %s: %s", protocol_name.data(), status_string.data()); } std::string FidlMethodResultErrorMessage(std::string_view formatted_error, std::string_view method_name) { return base::StringPrintf("Error calling %s: %s", method_name.data(), formatted_error.data()); } } // namespace internal fit::function LogFidlErrorAndExitProcess( const Location& from_here, std::string_view protocol_name) { return [from_here, protocol_name](zx_status_t status) { { logging::ZxLogMessage(from_here.file_name(), from_here.line_number(), logging::LOGGING_ERROR, status) .stream() << protocol_name << " disconnected unexpectedly, exiting"; } base::Process::TerminateCurrentProcessImmediately(1); }; } std::string FidlMethodResultErrorMessage( const fit::result& result, std::string_view method_name) { CHECK(result.is_error()); return internal::FidlMethodResultErrorMessage( result.error_value().FormatDescription(), method_name); } fit::function FidlBindingClosureWarningLogger( std::string_view protocol_name) { return [protocol_name](fidl::UnbindInfo info) { ZX_LOG(WARNING, info.status()) << protocol_name << " unbound"; }; } } // namespace base