Old client code:
printf("foo: %d, bar: %s.\n", f, b);
What I'd like to replace that printf (& 100's others like it) with:
my_printf(ctrl1, ctrl2, "foo: %d, bar: %s.\n", f, b);
Implementation of my_printf
void my_printf(CtrlT1 c1, Ctrl c2, char* fmt, ...) {
/* Do stuff with c1 & c2 */
fprintf(log, fmt, **WHAT_GOES_HERE**);
}
What I've tried so far
It seems like there ought to be a simple, direct way to pass the list of arguments associated with ... through to fprintf. I tried fprintf(log, fmt, ...); but the compiler complains, "syntax error before '...' token".
I also tried:
va_list ap;
va_start(ap, fmt);
fprintf(log, fmt, ap);
The call with the va_list compiles and even runs without coring, but what's being passed to printf is plainly not the same thing as what was passed into my function as ..., as may be judged by the output (representation of non-printing char).
If push comes to shove, I could probably walk through the contents of the va_list by brute-force but that seems stupid. Is there no simple token or syntax to pass that ... through?