32#ifndef _ACF_UTILS_LOG_H_
33#define _ACF_UTILS_LOG_H_
37#ifndef _LACF_WITHOUT_XPLM
38#include <XPLMUtilities.h>
51typedef void (*logfunc_t)(
const char *);
52API_EXPORT
void log_init(logfunc_t func,
const char *prefix);
56#ifndef _LACF_WITHOUT_XPLM
69#if defined(__GNUC__) || defined(__clang__)
70#define BUILTIN_STRRCHR __builtin_strrchr
72#define BUILTIN_STRRCHR strrchr
89#define log_basename(f) \
90 (BUILTIN_STRRCHR(f, '/') ? BUILTIN_STRRCHR(f, '/') + 1 : \
91 (BUILTIN_STRRCHR(f, '\\') ? BUILTIN_STRRCHR(f, '\\') + 1 : (f)))
113 log_impl(log_basename(__FILE__), __LINE__, __VA_ARGS__)
119#define logMsg_v(fmt, ap) \
120 log_impl_v(log_basename(__FILE__), __LINE__, (fmt), (ap))
121API_EXPORT
void log_impl(
const char *filename,
int line,
122 PRINTF_FORMAT(
const char *fmt), ...) PRINTF_ATTR(3);
123API_EXPORT
void log_impl_v(const
char *filename,
int line, const
char *fmt,
127API_EXPORT
void log_backtrace_sw64(PCONTEXT ctx);
static void log_xplm_cb(const char *str)
void log_impl_v(const char *filename, int line, const char *fmt, va_list ap)
void log_impl(const char *filename, int line, const char *fmt,...)
void log_init(logfunc_t func, const char *prefix)
void log_backtrace(int skip_frames)
logfunc_t log_get_logfunc(void)