Skip to content
  • Filip Roséen's avatar
    include/vlc_plugin.h: fixed problematic linkage on callback argument · 7abef20e
    Filip Roséen authored and Rémi Denis-Courmont's avatar Rémi Denis-Courmont committed
    
    
    The rationale behind this patch is easier to explain with a little bit
    of code than in words, but one can summarize it with; "wrong linkage
    used for `vlc_set_cb` when `include/vlc_plugin.h` is compiled as C++,
    this fixes that".
    
    Explanation
    -----------
    
        extern "C" typedef void(*callback_t)();
    
        void cpp_func (callback_t);
    
    Above the name `cpp_func` has C++ linkage, and its type is a C++ function
    returning `void`, accepting a pointer-to-function-with-C-linkage (returning
    `void` and takes no arguments).
    
        typedef void(*callback_t) ();
    
        extern "C" int c_func (callback_t);
    
    In this example (matching the code in `include/vlc_plugin.h`), the name `c_func`
    has C linkage, and its type is a C function returning `int`, accepting a
    pointer-to-function-with-C++-linkage (that returns `void` and takes no
    arguments).
    
    Conclusion
    ----------
    
    Since `vlc_entry_*` will be called from C, the first parameter when invoked will
    be a pointer to function with C linkage---as such this patch fixes the
    previously erroneous linkage.
    
    Signed-off-by: default avatarRémi Denis-Courmont <remi@remlab.net>
    7abef20e