2017-10-20 40 views
0

Donc j'essaye de surcharger la fonction de fscanf dans c, mais je veux seulement que le comportement différent se produise si certaines conditions sont rencontrées; Si ces conditions ne sont pas remplies, je veux juste appeler le fscanf original. Je sais que vous pouvez utiliser dlsym pour utiliser la version originale d'une fonction en l'interposant, mais le problème avec fscanf est que c'est variadique. Je peux obtenir tous les paramètres passés dans ma fonction en utilisant va_list et va_arg, mais comment dois-je appeler le fscanf original sur ces paramètres quand je ne sais pas combien de paramètres il y a?Interférer fscanf seulement sous certaines conditions

+0

En ce qui concerne la transmission d'arguments variadiques, vous appelez vfscanf. –

Répondre

0

Vous ne pouvez pas appeler le fscanf d'origine à partir du fscanf interposé. Vous avez juste à appeler vfscanf(). Votre fonction interposée ressemblerait à:

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; 
}