Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Dec 2014 15:21:15 +0100
From:      Luigi Rizzo <rizzo@iet.unipi.it>
To:        current@freebsd.org
Subject:   wrapping a vararg C function (specifically, log() in the kernel)
Message-ID:  <20141218142115.GA17786@onelab2.iet.unipi.it>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20141218142115.GA17786>