You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.8 KiB
C

/* See the end of this file for copyright and license terms. */
#pragma once
/**
* @brief Header for the `kprintf()` family of functions.
*/
#include <stdarg.h>
#include <gay/cdefs.h>
#include <gay/types.h>
/**
* @brief Print to the kernel log.
*
* @param fmt A printf style format string
* @returns The amount of bytes written,
* or a negative number from `errno.h` on failure
*/
int kprintf(const char *__restrict fmt, ...) __printflike(1, 2);
/**
* @brief Print to the kernel log.
*
* @param fmt A printf style format string
* @param args The variable arguments pointer
* @returns The amount of bytes written,
* or a negative number from `errno.h` on failure
*/
int kvprintf(const char *__restrict fmt, va_list args) __printflike(1, 0);
/**
* @brief Printing functions that `kprintf()` and friends call for writing.
* Depending on the current kernel log output target (which in turn depends
* primarily on the current runlevel), this will be implemented by different
* subsystems. To change the printer, call `kprintf_set_printer()`.
*/
struct kprintf_printer {
/**
* @brief Write to the kernel log.
* The data itself may be cached in a buffer rather than written to the
* target immediately; `krpintf()` will call `flush()` when needed.
*
* @param printer A reference to the original structure
* @param buf Data to write
* @param len Length of `buf` in bytes
* @returns The amount of bytes actually written,
* or a negative code from `errno.h` on failure
*/
ssize_t (*write)(struct kprintf_printer *printer, const void *buf, size_t len);
/**
* @brief Flush the kernel log buffer.
* On implementations that don't have a buffer, this can be a no-op.
* If that is the case, this call should always return 0.
*
* @param printer A reference to the original structure
* @returns The amount of bytes flushed out (0 if none),
* or a negative code from `errno.h` on failure
*/
ssize_t (*flush)(struct kprintf_printer *printer);
};
/**
* @brief Set the current printer for the `kprintf()` family of functions.
*
* @param new Implementation of the write and flush functions
* @returns 0 on success, or a negative code from `errno.h` on failure
*/
int kprintf_set_printer(struct kprintf_printer *new);
/*
* This file is part of GayBSD.
* Copyright (c) 2021 fef <owo@fef.moe>.
*
* GayBSD is nonviolent software: you may only use, redistribute, and/or
* modify it under the terms of the Cooperative Nonviolent Public License
* (CNPL) as found in the LICENSE file in the source code root directory
* or at <https://git.pixie.town/thufie/npl-builder>; either version 7
* of the license, or (at your option) any later version.
*
* GayBSD comes with ABSOLUTELY NO WARRANTY, to the extent
* permitted by applicable law. See the CNPL for details.
*/