/* SPDX-License-Identifier: LGPL-2.1-only */ /* * The Rin Library – diagnostics module * * Copyright (C) 2015-2021 Gediminas Jakutis */ #ifndef LIBRIN_DIAGNOSTIC_INCLUDED #define LIBRIN_DIAGNOSTIC_INCLUDED #include "rin/definitions.h" #include enum rin_diag_outstream { rin_diag_err, rin_diag_warn, rin_diag_fixme, rin_diag_info }; void rin_diag_init(void); int rin_diag_format(const enum rin_diag_outstream, const char * const format); int rin_diag_set_outstream(const enum rin_diag_outstream channel, FILE * const stream); int rin_diag_channel_set_enabled_state(const enum rin_diag_outstream channel, const unsigned int enable); void __rin_err(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) FORMAT_STRING(4, 5); void __rin_warn(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) FORMAT_STRING(4, 5); void __rin_fixme(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) FORMAT_STRING(4, 5); void __rin_info(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) FORMAT_STRING(4, 5); #define rin_err(a,...) do {__rin_err(__func__, __LINE__, __FILE__, a __VA_OPT__(,) __VA_ARGS__); } while (0) #define rin_warn(a,...) do {__rin_warn(__func__, __LINE__, __FILE__, a __VA_OPT__(,) __VA_ARGS__); } while (0) #define rin_fixme(a,...) do {__rin_fixme(__func__, __LINE__, __FILE__, a __VA_OPT__(,) __VA_ARGS__); } while (0) #define rin_info(a,...) do {__rin_info(__func__, __LINE__, __FILE__, a __VA_OPT__(,) __VA_ARGS__); } while (0) #endif /* LIBRIN_DIAGNOSTIC_INCLUDED */