diff --git a/src/dynamic_load.c b/src/dynamic_load.c index 8b36ac562d368c85d0955d4077136bbf3ae44cde..b903f41d1bd55e2acdddfe03d44f13306956d0d5 100644 --- a/src/dynamic_load.c +++ b/src/dynamic_load.c @@ -8,7 +8,7 @@ #define USE_DLD #endif -#if 0 +#if 1 #if defined(HAVE_DLOPEN) || defined(USE_DLD) #include "interpret.h" @@ -26,20 +26,21 @@ #include <dld.h> #endif +typedef void (*modfun)(void); + struct module_list { struct module_list * next; void *module; - struct module mod; + modfun init, exit; }; struct module_list *dynamic_module_list = 0; void f_load_module(INT32 args) { -#ifdef HAVE_DLOPEN void *module; -#endif + modfun init, exit; struct module_list *new_module; const char *module_name; @@ -68,16 +69,13 @@ void f_load_module(INT32 args) module=strdup(module_name); #endif /* HAVE_DLOPEN */ - struct module *tmp; - fun init, init2, exit; - #ifdef HAVE_DLOPEN - init=(fun)dlsym(module, "pike_module_init"); - exit=(fun)dlsym(module, "pike_module_exit"); + init=(modfun)dlsym(module, "pike_module_init"); + exit=(modfun)dlsym(module, "pike_module_exit"); #elif defined(USE_DLD) - init = (fun)dld_get_func("pike_module_init"); - exit = (fun)dld_get_func("pike_module_exit"); + init = (modfun)dld_get_func("pike_module_init"); + exit = (modfun)dld_get_func("pike_module_exit"); #endif /* HAVE_DLOPEN */ if(!init || !exit) @@ -96,20 +94,14 @@ void f_load_module(INT32 args) new_module->next=dynamic_module_list; dynamic_module_list=new_module; new_module->module=module; - new_module->mod.init_efuns=init; - new_module->mod.init_programs=init2; - new_module->mod.exit=exit; - new_module->mod.refs=0; - - tmp=current_module; - current_module = & new_module->mod; - - current_module=tmp; + new_module->init=init; + new_module->exit=exit; pop_n_elems(args); start_new_program(); - (*(fun)init)(); - push_program(end_c_program()); + (*(modfun)init)(); + + push_program(end_program()); } @@ -134,7 +126,7 @@ void exit_dynamic_load() { struct module_list *tmp=dynamic_module_list; dynamic_module_list=tmp->next; - (*tmp->mod.exit)(); + (*tmp->exit)(); #ifdef HAVE_DLOPEN dlclose(tmp->module); #elif defined(USE_DLD)