blob: 6e1c585ee95b5fcf9ca3180015d0ce97e7b97c91 [file] [log] [blame]
// 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 <zircon/status.h>
#include <iomanip>
#include "base/location.h"
#include "base/process/process.h"
#include "base/strings/string_piece.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() {
// 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_
<< ")";
}
} // namespace logging
namespace base {
fit::function<void(zx_status_t)> LogFidlErrorAndExitProcess(
const Location& from_here,
StringPiece 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);
};
}
} // namespace base