Вставка 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;
 }
Другие вопросы по тегам