[vlc-devel] commit: GetSymbol: adding a leading underscore is NOT correct on _all_ OSes ( Rémi Denis-Courmont )

git version control git at videolan.org
Sat Jan 10 14:07:06 CET 2009


vlc | branch: master | Rémi Denis-Courmont <rdenis at simphalempin.com> | Sat Jan 10 15:00:55 2009 +0200| [b8faf36e58cc0a7f9a4d6e1d1f86fdf076aebbe3] | committer: Rémi Denis-Courmont 

GetSymbol: adding a leading underscore is NOT correct on _all_ OSes

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b8faf36e58cc0a7f9a4d6e1d1f86fdf076aebbe3
---

 src/modules/os.c |   44 ++++++++++++++------------------------------
 1 files changed, 14 insertions(+), 30 deletions(-)

diff --git a/src/modules/os.c b/src/modules/os.c
index 997e780..a34540b 100644
--- a/src/modules/os.c
+++ b/src/modules/os.c
@@ -70,7 +70,7 @@
  * Local prototypes
  *****************************************************************************/
 #ifdef HAVE_DYNAMIC_PLUGINS
-static void * GetSymbol        ( module_handle_t, const char * );
+static void *module_Lookup( module_handle_t, const char * );
 
 #if defined(HAVE_DL_WINDOWS)
 static char * GetWindowsError  ( void );
@@ -90,7 +90,8 @@ int module_Call( vlc_object_t *obj, module_t *p_module )
     int (* pf_symbol) ( module_t * p_module );
 
     /* Try to resolve the symbol */
-    pf_symbol = (int (*)(module_t *)) GetSymbol( p_module->handle, psz_name );
+    pf_symbol = (int (*)(module_t *)) module_Lookup( p_module->handle,
+                                                     psz_name );
 
     if( pf_symbol == NULL )
     {
@@ -287,41 +288,24 @@ void module_Unload( module_handle_t handle )
 }
 
 /**
- * GetSymbol: get a symbol from a dynamic library
+ * Looks up a symbol from a dynamically loaded library
  *
  * This function queries a loaded library for a symbol specified in a
  * string, and returns a pointer to it. We don't check for dlerror() or
  * similar functions, since we want a non-NULL symbol anyway.
- * \param handle handle to the module
- * \param psz_function function name
- * \return nothing
+ *
+ * @param handle handle to the module
+ * @param psz_function function name
+ * @return NULL on error, or the address of the symbol
  */
-static void * _module_getsymbol( module_handle_t, const char * );
-
-static void * GetSymbol( module_handle_t handle, const char * psz_function )
-{
-    void * p_symbol = _module_getsymbol( handle, psz_function );
-
-    /* MacOS X dl library expects symbols to begin with "_". So do
-     * some other operating systems. That's really lame, but hey, what
-     * can we do ? */
-    if( p_symbol == NULL )
-    {
-        char psz_call[strlen( psz_function ) + 2];
-
-        psz_call[ 0 ] = '_';
-        memcpy( psz_call + 1, psz_function, sizeof (psz_call) - 1 );
-        p_symbol = _module_getsymbol( handle, psz_call );
-    }
-
-    return p_symbol;
-}
-
-static void * _module_getsymbol( module_handle_t handle,
-                                 const char * psz_function )
+static void *module_Lookup( module_handle_t handle, const char *psz_function )
 {
 #if defined(HAVE_DL_DYLD)
-    NSSymbol sym = NSLookupSymbolInModule( handle, psz_function );
+    char psz_call[strlen( psz_function ) + 2];
+    psz_call[0] = '_';
+    memcpy( psz_call + 1, psz_function, sizeof( psz_call ) - 1 );
+
+    NSSymbol sym = NSLookupSymbolInModule( handle, psz_call );
     return NSAddressOfSymbol( sym );
 
 #elif defined(HAVE_DL_BEOS)




More information about the vlc-devel mailing list