blob: d348c7fb8f8771a2e876de737703a68999c3b37a [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include <lib/boot-options/boot-options.h>
#include <stdarg.h>
#include <stdio.h>
#include <phys/stdio.h>
#include "log.h"
FILE FILE::stdout_;
PhysConsole::PhysConsole()
: null_{[](void*, ktl::string_view s) -> int { return static_cast<int>(s.length()); }, nullptr},
mux_files_{} {}
PhysConsole& PhysConsole::Get() {
static PhysConsole gConsole;
return gConsole;
}
void InitStdout() { FILE::stdout_ = PhysConsole::Get().mux_; }
void PhysConsole::SetMux(size_t idx, const FILE& f) {
mux_files_[idx] = f;
mux_.files()[idx] = &mux_files_[idx];
}
void debugf(const char* fmt, ...) {
FILE* outfile = stdout;
// If kernel.phys.verbose=false then only write to the log.
FILE log_only_file;
if (gBootOptions && !gBootOptions->phys_verbose) {
if (!gLog) {
// The log isn't initialized yet, so write nothing.
return;
}
log_only_file = gLog->LogOnlyFile();
outfile = &log_only_file;
}
va_list args;
va_start(args, fmt);
vfprintf(outfile, fmt, args);
va_end(args);
}