#############################################################################*/
#include <argp.h>
+#include <stdio.h>
#include <syslog.h>
#include <isc/mem.h>
isc_mem_t* memctx;
} ctx_t;
+static void logger(ctx_t* ctx, int priority, const char* format, ...) {
+ char buffer[4096];
+ FILE* f = NULL;
+ ssize_t length;
+ va_list args;
+
+ // Don't log if below log level
+ if (priority > ctx->log_level)
+ return;
+
+ // Format the log message
+ va_start(args, format);
+ length = vsnprintf(buffer, sizeof(buffer), format, args);
+ va_end(args);
+
+ // Fail if we could not format the string
+ if (length < 0)
+ return;
+
+ // Select the output stream
+ switch (priority) {
+ case LOG_ERR:
+ f = stderr;
+ break;
+
+ default:
+ f = stdout;
+ break;
+ }
+
+ // Write to the output stream
+ fwrite(buffer, 1, length, f);
+}
+
+// Logging functions
+#define INFO(ctx, ...) logger(ctx, LOG_INFO, __VA_ARGS__)
+#define ERROR(ctx, ...) logger(ctx, LOG_ERR, __VA_ARGS__)
+#define DEBUG(ctx, ...) logger(ctx, LOG_DEBUG, __VA_ARGS__)
+
+static void run_loop(void* data) {
+ ctx_t* ctx = data;
+
+ DEBUG(ctx, "Event loop started\n");
+}
+
const char* argp_program_version = PACKAGE_VERSION;
static const char* args_doc = "TODO";