/*
* Copyright (C) 2021 Yubico AB - See COPYING
*/

#ifndef DEBUG_H
#define DEBUG_H

#include <stdio.h>

#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 */