tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

WARNS > 3 then -Wformat=2: pb with va_list



With inetd(8), I'm about to achieve adding functionalities, more
information for config checking with, eventually, a smaller exec.

At first, I used macros with VA_ARGS to redirect messages whether to
syslog(3) (daemonized) or to stderr or stdout (foreground mode).

The first blunder was to concatenate a trailing "\n", in the macro,
in the fprintf() case that rendered the format in syslog different from
the format for fprintf which duplicated the string.

But, having corrected that, I realized that using macros was adding a
lot of undue code. It was far more correct to define a my_syslog() procedure
that will do the same without this added code.

But inetd is compiled with WARNS = 6, and this adds -Wformat=2 that
adds -Wformat-nonliteral, and warnings are treated as errors.

Since the compiler is unable to check in my_syslog(prio, fmt, ...) the
fmt against the args, it chokes.

I added:

CFLAGS+=-Wno-error=format-nonliteral

still getting the warning, but at least not fatal.

Is there a way to please the compiler when using a va_list and calling
syslog(3) or fprintf(3)?

I thought of creating a constant char * const log_msg[] = { ... }; 
with all the formats, and passing an integer as index in this array, but
will this solve this problem?---and is it worth?
-- 
        Thierry Laronde <tlaronde +AT+ polynum +dot+ com>
                     http://www.kergis.com/
                    http://kertex.kergis.com/
Key fingerprint = 0FF7 E906 FBAF FE95 FD89  250D 52B1 AE95 6006 F40C


Home | Main Index | Thread Index | Old Index