warning: ISO C forbids assignment between function pointer and `void *

warning: ISO C forbids assignment between function pointer and `void * - C - Programmation

Marsh Posté le 17-07-2011 à 17:58:02    

Si vous savez comment solutionner ça, je suis preneur :
 
http://www.siteduzero.com/forum-83 [...] rning.html

Reply

Marsh Posté le 17-07-2011 à 17:58:02   

Reply

Marsh Posté le 17-07-2011 à 18:46:09    

Si tu veux rester en ISO C, il faut caster les appels à dlsym:
http://pubs.opengroup.org/onlinepu [...] dlsym.html
Donc par exemple quelque chose comme  
hook._open = (int (*)(const char *, int , mode_t)) dlsym( RTLD_NEXT, "open" );
hook._close = (int (*)(int)) dlsym( RTLD_NEXT, "close" );
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 17-07-2011 à 18:58:48    

Mais il y a des problèmes d'indirection dans ton code:
hook._open est un pointeur sur une fonction. Il doit donc être appelé comme (*(hook._open))(...)
Et quand tu fais hook._open( pathname, flags, mode ); il n'y a pas de raison que ça marche, puisque ce devrait être (*(hook._open))(pathname, flags, mode );
et idem pour return hook._close( fd ); ce devrait être  (*(hook._close))( fd );
 
Je vois le même problème dans le code posté dans ton autre sujet:
if ( ! hook._gettimeofday )
hook._gettimeofday = (int (*)(struct timeval *, struct timezone *))dlsym( RTLD_NEXT, "gettimeofday" );
if (test == 0) {
 test++;
 process_run(123);
 test--;
}
ret = wrapper._gettimeofday( tv, tz );
 
Le hook est casté avec une structure d'arguments incorrecte, et si tu utilises la même technique, l'appel au wrapper devrait être  ret = (*(wrapper._gettimeofday))( tv, tz );
 
 
A+,


Message édité par gilou le 17-07-2011 à 19:24:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 17-07-2011 à 20:15:22    

Merci à tous pour votre aide.
 
La réponse finale est ici :
http://www.developpez.net/forums/d [...] -and-void/
 
Obsidian est un authentique guru, merci à lui de prendre le temps de faire part de son savoir à des développeurs de mon niveau.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed