Вставка fscanf только при определенных условиях
Поэтому я пытаюсь переопределить функцию fscanf в c, но я хочу, чтобы другое поведение происходило только при соблюдении определенных условий; если эти условия не выполняются, я хочу просто позвонить оригинальному fscanf. Я знаю, что вы можете использовать dlsym, чтобы использовать оригинальную версию функции при ее вставке, но проблема с fscanf заключается в том, что она является переменной. Я могу получить все параметры, переданные в мою функцию, используя va_list и va_arg, но как мне вызвать оригинальный fscanf для этих параметров, когда я на самом деле не знаю, сколько их параметров?
1 ответ
Решение
Вы не можете вызвать оригинальный fscanf из вставленного fscanf. Вам просто нужно позвонить vfscanf()
, Ваша вставленная функция будет выглядеть так:
int fscanf(FILE *stream, const char *format, ...)
{
....
....
va_list ap;
va_start(ap, format);
int rc = vfscanf(stream, format, ap);
va_end(ap);
return rc;
}