[vlc-devel] Callbacks in modules written in C++ have wrong linkage

Rémi Denis-Courmont remi at remlab.net
Mon Feb 22 20:39:31 CET 2016


Le 2016-02-22 14:37, Filip Roséen a écrit :
>> NOTE
>>
>> Related to this problem is the fact that loading of modules stores
>> pointer-to-functions inside pointer-to-void, which is
>> undefined-behavior according to both the C and C++ Standard.

Yes and no. ISO C leaves it as a portability issue what conversion what 
function and void pointers do, but somewhat recommends supporting it for 
debugging purpose anyway (J.5.7). POSIX makes it well defined so we do 
not care:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html

Win32 & OpenGL use a different style:
void (*)() instead of void *.

I think that is more dangerous, as it allows accidental function calls 
without proper cast. Such a function call would fail on LP64 and LLP64  
platforms due to default promotion rules.

-- 
Rémi Denis-Courmont
http://www.remlab.net/


More information about the vlc-devel mailing list