wrapping a vararg C function (specifically, log() in the kernel)
Luigi Rizzo
rizzo at iet.unipi.it
Thu Dec 18 14:17:01 UTC 2014
Hi,
in the porting of some kernel code to FreeBSD, i need to remap one
function with a variable number of arguments to the log() function
from the freebsd kernel.
Normally i would do
#define WARN(x, args...) log(LOG_WARNING, args)
but this does not work in my case because the function is called in
(many) blocks where there is already a local variable with the same name
bool log;
which is used a ton of times.
I was wondering if there is some C compiler magic i can use to do the
remapping without going through a macro; I haven't found any direct one,
though perhaps something like
extern void (*freebsd_log)(int level, const char *fmt, ...);
#define WARN(x, args...) freebsd_log(LOG_WARNING, args)
followed somewhere in a safe place by
freebsd_log = log;
may do the job.
Any other option ?
cheers
luigi
More information about the freebsd-current
mailing list