diff --git a/src/utils_complain.h b/src/utils_complain.h
index 56e74eabac3400d729df19d80ed7636157ede56b..09c43750b3979f2bdd7e67a50bd60a298895ca2f 100644 (file)
--- a/src/utils_complain.h
+++ b/src/utils_complain.h
int interval;
} c_complain_t;
-#define C_COMPLAIN_INIT { 0, 0 }
+#define C_COMPLAIN_INIT_STATIC { 0, 0 }
+#define C_COMPLAIN_INIT(c) do { (c)->last = 0; (c)->interval = 0; } while (0)
/*
* NAME
*/
void c_complain_once (int level, c_complain_t *c, const char *format, ...);
+/*
+ * NAME
+ * c_would_release
+ *
+ * DESCRIPTION
+ * Returns true if the specified complaint would be released, false else.
+ */
+#define c_would_release(c) ((c)->interval != 0)
+
/*
* NAME
* c_release
*
* See `c_complain' for a description of the parameters.
*/
-void c_release (int level, c_complain_t *c, const char *format, ...);
+void c_do_release (int level, c_complain_t *c, const char *format, ...);
+#define c_release(level, c, ...) \
+ do { \
+ if (c_would_release (c)) \
+ c_do_release(level, c, __VA_ARGS__); \
+ } while (0)
#endif /* UTILS_COMPLAIN_H */