On Thu, 2014-12-18 at 15:21 +0100, Luigi Rizzo wrote: > 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 Normally I'd fix it like: #define WARN(x,args...) locallog(LOG_WARNING, args) static inline void locallog(int lvl, const char *fmt, ...) { va_list ap; va_start(ap, fmt); logv(level, fmt, ap); va_end(ap); } But unfortunately we don't have a logv() function. I think maybe we should have one. :) -- IanReceived on Thu Dec 18 2014 - 13:42:03 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:54 UTC