#ifndef NOTIFY_H_V4O5JY61 #define NOTIFY_H_V4O5JY61 /* simple common notify hook */ typedef void (notify_fn_t)(unsigned int, const char *, ...); extern notify_fn_t *notify __attribute__((format(printf, 2, 3))); #define NOTIFY_LEVEL_FATAL 0 #define NOTIFY_LEVEL_ERROR 1 #define NOTIFY_LEVEL_INFO 2 #define NOTIFY_LEVEL_VERBOSE 3 #define NOTIFY_LEVEL_DEBUG 4 #define NOTIFY_LEVEL_LOCK 5 #define NOTIFY(__level__,__fmt__,...) do { if (notify) notify((__level__), __fmt__, ## __VA_ARGS__); } while (0) #define NOTIFY_FATAL(fmt,...) NOTIFY(NOTIFY_LEVEL_FATAL, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__) #define NOTIFY_ERROR(fmt,...) NOTIFY(NOTIFY_LEVEL_ERROR, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__) #define NOTIFY_INFO(fmt,...) NOTIFY(NOTIFY_LEVEL_INFO, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__) #define NOTIFY_VERBOSE(fmt,...) NOTIFY(NOTIFY_LEVEL_VERBOSE, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__) #ifndef NDEBUG #define NOTIFY_DEBUG(fmt,...) NOTIFY(NOTIFY_LEVEL_DEBUG, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__) #define NOTIFY_DEBUG_LOCK(fmt,...) NOTIFY((NOTIFY_LEVEL_LOCK), "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__) #else /* !NDEBUG */ #define NOTIFY_DEBUG(fmt,...) do { } while (0) #define NOTIFY_DEBUG_LOCK(fmt,...) do { } while (0) #endif /* !NDEBUG */ #endif /* NOTIFY_H_V4O5JY61 */