pike.git / src / dynamic_load.c

version» Context lines:

pike.git/src/dynamic_load.c:22:    void *module;    struct module mod;   };      struct module_list *dynamic_module_list = 0;      void f_load_module(INT32 args)   {    void *module;    struct module_list *new_module; +  int res;       if(sp[-args].type != T_STRING)    error("Bad argument 1 to load_module()\n");   #ifndef RTLD_NOW   #define RTLD_NOW 0   #endif    module=dlopen(sp[-args].u.string->str, RTLD_NOW); -  pop_stack(); +        if(module)    {    struct module *tmp;    fun init, init2, exit;       init=(fun)dlsym(module, "init_module_efuns");    init2=(fun)dlsym(module, "init_module_programs");    exit=(fun)dlsym(module, "exit_module");       if(!init || !init2 || !exit)    {    char *foo, buf1[1024], buf2[1024];    foo=STRRCHR(sp[-args].u.string->str,'/'); -  if(!foo) foo=sp[-args].u.string->str; +  if(foo)    foo++; -  +  else +  foo=sp[-args].u.string->str;    if(strlen(foo) < 1000)    {    strcpy(buf1, foo);    foo=buf1;    -  while((*foo <= 'a' && *foo >= 'z' ) || (*foo <= 'A' && *foo >= 'Z' )) +  while((*foo >= 'a' && *foo <= 'z' ) || (*foo >= 'A' && *foo <= 'Z' ))    foo++;       *foo=0;       strcpy(buf2,"init_");    strcat(buf2,buf1);    strcat(buf2,"_efuns");    init=(fun)dlsym(module, buf2);       strcpy(buf2,"init_");
pike.git/src/dynamic_load.c:85:    new_module=ALLOC_STRUCT(module_list);    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 = & new_module->mod;       (*(fun)init)();    (*(fun)init2)();       current_module=tmp;    -  push_int(1); -  } else { -  push_int(0); +  res = 1; +  } else +  res = 0; +  pop_n_elems(args); +  push_int(res);   } - } +          #endif      void init_dynamic_load()   {   #ifdef HAVE_DLOPEN    add_efun("load_module",f_load_module,"function(string:int)",OPT_SIDE_EFFECT);   #endif   }