Есть функция mkmsg(), принимающая переменное число параметров. Что-то вроде такой:char *mkmsg(char *fmt, ...) {
char str[NAME_MAX+1];
va_list ap;
...
va_start(ap, fmt);
vsnprintf(str, NAME_MAX, fmt, ap);
va_end(ap);
...
return strdup(str);
}Всем хороша, только вот каждый раз перед ее вызовом приходится дергать free() для предыдущего вызова, типа так:
char *msg;
...
strlen(msg = mkmsg("msg1"));
free(msg);
strlen(msg = mkmsg("msg2"));решил написать обертку, типа такой:
char *mkmsg2(char *msg, char *fmt, ...) {
char *str;
va_list ap;
...
if (msg)
free(msg);str = <а тут хочу вызвать оригинальную mkmsg() и передать ей остальные параметры>
return str;
}Подскажите, плз., как тут выкрутиться не переписывая mkmsg()
>[оверквотинг удален]
> char *str;
> va_list ap;
> ...
> if (msg)
> free(msg);
> str = <а тут хочу вызвать оригинальную mkmsg() и
> передать ей остальные параметры>
> return str;
> }
> Подскажите, плз., как тут выкрутиться не переписывая mkmsg()Как вариант, вместо функции mkmsg2 можно использовать макрос
#define mkmsg2(msg, fmt, ...) ( ... проверка/очистка msg ... mkmsg(fmt, __VA_ARGS__) ... )
http://en.wikipedia.org/wiki/Variadic_macro