This caught a couple of bugs just fixed.
#include <mLib/daemonize.h>
#include <mLib/darray.h>
#include <mLib/dstr.h>
#include <mLib/daemonize.h>
#include <mLib/darray.h>
#include <mLib/dstr.h>
+#include <mLib/macros.h>
#include <mLib/mdup.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
#include <mLib/mdup.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
die(EXIT_FAILURE, "unexpected background tag `%s'", q);
}
die(EXIT_FAILURE, "unexpected background tag `%s'", q);
}
-static void dolog(int prio, const char *msg, ...)
+static void PRINTF_LIKE(2, 3) dolog(int prio, const char *msg, ...)
{
va_list ap;
dstr d = DSTR_INIT;
{
va_list ap;
dstr d = DSTR_INIT;
static void sigdie(int sig)
{ cleanup(); signal(sig, SIG_DFL); raise(sig); }
static void sigdie(int sig)
{ cleanup(); signal(sig, SIG_DFL); raise(sig); }
-static void putarg(string_v *av, const char *fmt, ...)
+static void PRINTF_LIKE(2, 3) putarg(string_v *av, const char *fmt, ...)
{
va_list ap;
dstr d = DSTR_INIT;
{
va_list ap;
dstr d = DSTR_INIT;
+#include <mLib/macros.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
-/*----- Macros ------------------------------------------------------------*/
-
-/* --- @IGNORE@ --- *
- *
- * Arguments: @expr@ = an expression whose value is to be ignored
- *
- * Use: Ignores the value of an expression, even if compilers want
- * us not to.
- */
-
-#define IGNORE(expr) do { if (expr) ; } while (0)
-
/*----- Functions provided ------------------------------------------------*/
/* --- @u_quotify@ --- *
/*----- Functions provided ------------------------------------------------*/
/* --- @u_quotify@ --- *
-static void itrace(unsigned mask, const char *fmt, ...)
+static void PRINTF_LIKE(2, 3) itrace(unsigned mask, const char *fmt, ...)
{
va_list ap;
dstr d = DSTR_INIT;
{
va_list ap;
dstr d = DSTR_INIT;
#define A_END ((char *)0)
#define A_END ((char *)0)
-static void warn(const char *fmt, ...)
+static void EXECL_LIKE(0) IGNORABLE warn(const char *fmt, ...)
{
va_list ap;
dstr d = DSTR_INIT, dd = DSTR_INIT;
{
va_list ap;
dstr d = DSTR_INIT, dd = DSTR_INIT;
-extern void a_format(dstr */*d*/, const char */*fmt*/, ...);
+extern void EXECL_LIKE(0) a_format(dstr */*d*/, const char */*fmt*/, ...);
* Use: Informs all admin connections of a warning.
*/
* Use: Informs all admin connections of a warning.
*/
-extern void a_warn(const char */*fmt*/, ...);
+extern void EXECL_LIKE(0) a_warn(const char */*fmt*/, ...);
/* --- @a_notify@ --- *
*
/* --- @a_notify@ --- *
*
* Use: Sends a notification to interested admin connections.
*/
* Use: Sends a notification to interested admin connections.
*/
-extern void a_notify(const char */*fmt*/, ...);
+extern void EXECL_LIKE(0) a_notify(const char */*fmt*/, ...);
/* --- @a_create@ --- *
*
/* --- @a_create@ --- *
*
* Use: Writes a trace message.
*/
* Use: Writes a trace message.
*/
-T( extern void ps_trace(unsigned /*mask*/, const char */*fmt*/, ...); )
+T( extern void PRINTF_LIKE(2, 3)
+ ps_trace(unsigned /*mask*/, const char */*fmt*/, ...); )
* Use: Writes a warning message.
*/
* Use: Writes a warning message.
*/
-extern void ps_warn(const char */*fmt*/, ...);
+extern void PRINTF_LIKE(1, 2) ps_warn(const char */*fmt*/, ...);
/* --- @ps_tunfd@ --- *
*
/* --- @ps_tunfd@ --- *
*