Branch: Tag:

1997-02-07

1997-02-07 00:59:25 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

new load_module, returns a program

Rev: src/dynamic_load.c:1.10

8:   #define USE_DLD   #endif    - #if 0 + #if 1      #if defined(HAVE_DLOPEN) || defined(USE_DLD)   #include "interpret.h"
26:   #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:    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:    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; +  new_module->init=init; +  new_module->exit=exit;    -  tmp=current_module; -  current_module = & new_module->mod; -  -  current_module=tmp; -  +     pop_n_elems(args);    start_new_program(); -  (*(fun)init)(); -  push_program(end_c_program()); +  (*(modfun)init)(); +  +  push_program(end_program());   }      
134: Inside #if defined(HAVE_DLOPEN) || defined(USE_DLD)
   {    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)