tReplaced use of gmodule with standard dlopen/dlsym/dlclose calls, which seem to actually work. - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 459af9c28bbad3621b0605d3a0cafd83ddabbde9
 (DIR) parent ed2c06e2d0e4bce066bf8fff4788b014509665fd
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Mon, 13 May 2002 15:37:24 +0000
       
       Replaced use of gmodule with standard dlopen/dlsym/dlclose calls, which
       seem to actually work.
       
       
       Diffstat:
         M src/sound.c                         |      20 ++++++++++----------
       
       1 file changed, 10 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/src/sound.c b/src/sound.c
       t@@ -25,32 +25,32 @@
        #endif
        
        #include <glib.h>
       -#include <gmodule.h>
       +#include <dlfcn.h>
        
        #include "sound.h"
        
        static SoundDriver *driver = NULL;
        typedef SoundDriver *(*InitFunc)(void);
       -GModule *soundmodule = NULL;
       +void *soundmodule = NULL;
        
        void SoundInit(void)
        {
          InitFunc ifunc;
       -  gchar *err;
          
       -  soundmodule = g_module_open("sound.so", G_MODULE_BIND_LAZY);
       +  soundmodule = dlopen("sound.so", RTLD_NOW);
          if (!soundmodule) {
       -    g_print("g_module_open failed: %s\n", g_module_error());
       +    /* FIXME: using dlerror() here causes a segfault later in the program */
       +    g_print("dlopen failed\n");
            return;
          }
       -  if (g_module_symbol(soundmodule, "init", (gpointer *)&ifunc)) {
       -    g_print("module symbol = %p\n", ifunc);
       +  ifunc = dlsym(soundmodule, "init");
       +  if (ifunc) {
            driver = (*ifunc)();
            if (driver) {
       -      g_print("Plugin %s init OK\n", driver->name);
       +      g_print("%s sound plugin init OK\n", driver->name);
            }
          } else {
       -    g_print("g_module_symbol failed: %s\n", g_module_error());
       +    g_print("dlsym failed: %s\n", dlerror());
          }
        }
        
       t@@ -67,7 +67,7 @@ void SoundClose(void)
            driver->close();
          }
          if (soundmodule) {
       -    g_module_close(soundmodule);
       +    dlclose(soundmodule);
          }
        }