/* * Copyright (C) 2021 Yubico AB - See COPYING */ #ifndef DEBUG_H #define DEBUG_H #include #define DEFAULT_DEBUG_FILE stderr #if defined(DEBUG_PAM) #define D(file, ...) \ debug_fprintf(file, __FILE__, __LINE__, __func__, __VA_ARGS__) #else #define D(file, ...) ((void) 0) #endif /* DEBUG_PAM */ #define debug_dbg(cfg, ...) \ do { \ if (cfg->debug) { \ D(cfg->debug_file, __VA_ARGS__); \ } \ } while (0) #ifdef __GNUC__ #define ATTRIBUTE_FORMAT(f, s, a) __attribute__((format(f, s, a))) #else #define ATTRIBUTE_FORMAT(f, s, a) #endif FILE *debug_open(const char *); void debug_close(FILE *f); void debug_fprintf(FILE *, const char *, int, const char *, const char *, ...) ATTRIBUTE_FORMAT(printf, 5, 6); #endif /* DEBUG_H */